错误使x NHibernate.PropertyValueException的属性值脱水System.ArgumentOutOfRangeException

时间:2018-02-16 11:27:44

标签: c# .net hibernate nhibernate nhibernate-mapping

之前我检查了类似的问题,但没有找到我的问题的答案。

例外:

Error dehydrating property value for webportale_ger_webservice.Model.SPTPL.SUMANZAUFTRAEGE NHibernate.PropertyValueException

但是webportale_ger_webservice.Model.SPTPL.SUMANZAUFTRAEGE只是抛出此异常的值之一。

堆栈跟踪:

       bei NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index)
   bei NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
   bei NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session)
   bei NHibernate.Action.EntityInsertAction.Execute()
   bei NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
   bei NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
   bei NHibernate.Engine.ActionQueue.ExecuteActions()
   bei NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
   bei NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
   bei NHibernate.Impl.SessionImpl.Flush()
   bei NHibernate.Transaction.AdoTransaction.Commit()
   bei webportale_ger_webservice.web_api.SP_WRITE_Sperrmuellanmeldung(String vornameStr, String nachnameStr, String strasseStr, String hnrzusatzStr, Int32 hausnrStr, String plzStr, String ortStr, String mailStr, String dateStr, String telStr, String argef, String gef_menge, String bemerkungStr, String arstrasse, String arplz, String annahme_art, String benachrichtigung) in C:\Quellen\VSWebNeoBackEnd\VSWebNeoBackEnd\VSWebNeoBackEnd\project india webservice\webportale_ger_webservice.asmx.cs:Zeile 615.

的InnerException:

The index was out of range. It can not be negative and smaller than the listing.
Parameter name: index

InnerException的StackTrace:

  bei System.Collections.ArrayList.get_Item(Int32 index)
   bei Oracle.ManagedDataAccess.Client.OracleParameterCollection.GetParameter(Int32 index)
   bei NHibernate.Type.Int32Type.Set(IDbCommand rs, Object value, Int32 index)
   bei NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, Boolean[] settable, ISessionImplementor session)
   bei NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index)

我的班级和地图:

sptpl.cs(剪辑):

public class SPTPL
    {
        ...
        public virtual STRASSE STRASSE { get; set; }            
        ...
        public virtual int JAHR { get; set; }
        public virtual int DISPOJAHR { get; set; }
        public virtual int SUMANZAUFTRAEGE { get; set; }    
        public virtual double KARSTRASSE { get; set; }

    }

sptpl.hbm.xml(剪辑):

  <class name="SPTPL" table="SPTPL" lazy="false" >

  <many-to-one name="STRASSE">
      <column name="L_ARSTRASSE"  not-null="false" />
    </many-to-one>
...
    <property name="SUMANZAUFTRAEGE">
      <column name="SUMANZAUFTRAEGE"  not-null="false" />
    </property>
    <property name="JAHR">
      <column name="JAHR"  not-null="false" />
    </property>
    <property name="DISPOJAHR">
      <column name="DISPOJAHR"  not-null="false" />
    </property>
    <property name="KARSTRASSE">
      <column name="KARSTRASSE"  not-null="false" />
    </property>

这就是我使用它的地方:

KUNDE kunde = session.Load<KUNDEN>(kundenAr);

STRASSE kunde_strasse = session.Load<STRASSE>(kunde.STRASSE.AR);

    var sperrmuell = new SPTPL { DATUM = datum, OBJEKTE = objekte, KUNDEN = 
                    kunde, ANSPR_EMAIL = kunde.EMAIL1,  KARSTRASSE = kunde_strasse.AR,...
                    ANSPR_NAME2 = nachnameStr, ANSPR_NAME1 = vornameStr, 
                    SUMANZAUFTRAEGE = 1, JAHR = jahr, DISPOJAHR = 0 };

     using (ITransaction transaction = session.BeginTransaction())
      {
                    session.Save(sperrmuell);                

                    transaction.Commit();

  }

这些只是剪报,所以如果您需要更多代码,请告诉我。 我真的不知道问题是什么。有人有线索吗?

1 个答案:

答案 0 :(得分:0)

通过搜索&#34;指数超出范围来找到答案&#34;错误: https://stackoverflow.com/a/24278610/7177439

我在映射文件中有一个加倍的列:一个多对一引用和一个具有相同&#34;名称&#34;属性。