NHibernate:错误脱水属性 - 这到底是什么?

Jer*_*acs 22 c# nhibernate

我正在金融系统中进行相当复杂的NHibernate交易,创建付款,记录分类帐条目,检查付款是否是发票的总金额,如果是,则将发票标记为全额付款等.很多有趣的东西.当然,它必须在单个交易中发生.

当我尝试将更改提交到会话时,我收到以下错误:

Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这并没有出现很多记录.有人能告诉我这意味着什么以及我需要在哪里集中调试工作?

UPDATE

每个请求,这是完整的错误消息:

NHibernate.PropertyValueException: Error dehydrating property v  alue for C3.DataModel.CFAPTransaction.Vendor --->
Run Code Online (Sandbox Code Playgroud)

NHibernate.HibernateException:无法解析属性:NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName)中的NHVendorId NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(Object entity,String propertyPath)at NHibernate.Persister.Entity.AbstractEntityPersister. GetPropertyValue(对象OBJ,字符串propertyName的,EntityMode entityMode)在NHibernate.Type.EntityType.GetIdentifier(对象值,ISessionImplementor会话)在NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand的ST,对象的值,的Int32索引,布尔[]可固化,ISessionImplementor会话)at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object [] fields,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32 table,IDbCommand statement,ISessionImplementor session,Int32 index) - - 内部异常堆栈跟踪结束---在NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object []字段,Object rowId,Boolea n [] includeProperty,Boolean [] [] includeColumns,Int32表,IDbCommand语句,ISessionImplementor会话,Int32索引)NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,Object [] fields,Boolean [] notNull,Int32 j在NHibernate.Engine的NHibernate.Action.EntityInsertAction.Execute()中的NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,Object [] fields,Object obj,ISessionImplementor session)中的,SqlCommandInfo sql,Object obj,ISessionImplementor session. ActionQueue.Execute在NHibernate.Engine.ActionQueue.ExecuteActions(在NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会议)在NHibernate.Event.Default(IExecutable可执行文件)在NHibernate.Engine.ActionQueue.ExecuteActions(IList的列表)).在NHibernate.Impl.SessionImpl.Flush()的NHibernate.Impl.SessionImpl.Flush()中的DefaultFlushEventListener.OnFlush(FlushEvent事件)位于C:\ projects\C3\C3.Da中的C3.DataModel.Repositories.NHUnitOfWork.Save()的NHibernate.Transaction.AdoTransaction.Commit()taModel.Generated\Generated\NHibernateRepositories.generated.cs:在C:\ projects\C3\C3.WebUI\Areas\Finance\Controllers \中的C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel模型)中的第2659行AccountsPayableController.cs:第434行

更新将 NHibernate抛入DEBUG模式,我得到了一堆这样的东西:

处理级联NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction for:C3.DataModel.APVendor cascade NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction for collection:C3.DataModel.APVendor.Transactions done cascade NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction for collection:C3.DataModel.做处理级联NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction为APVendor.Transactions:C3.DataModel.APVendor NHibernate.Event.Default.AbstractFlushingEventListener错误无法与会话NHibernate.PropertyValueException同步数据库状态:错误脱水属性值C3.DataModel.CFAPTransaction.供应商---> NHibernate.HibernateException:无法在NHibernate.Persister的NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(对象实体,String propertyPath)中解析属性:NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName)中的APVendorId .Entity.AbstractEntityPersister.GetProp NHibernate.Type.ManyToOneType.NullSafeSet的NHibernate.Type.EntityType.GetIdentifier(Object value,ISessionImplementor session)中的ertyValue(Object obj,String propertyName,EntityMode entityMode)(IDbCommand st,Object value,Int32 index,Boolean [] settable,ISessionImplementor会话)at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object [] fields,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32 table,IDbCommand statement,ISessionImplementor session,Int32 index) - - 内部异常堆栈跟踪结束---在NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object []字段,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32表,IDbCommand语句, NHiberna的NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,Object [] fields,Boolean [] notNull,Int32 j,SqlCommandInfo sql,Object obj,ISessionImplementor session)中的ISessionImplementor会话,Int32索引)在NHibernate.Engine的NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)的NHibernate.Action.EntityInsertAction.Execute()中的te.Persister.Entity.AbstractEntityPersister.Insert(Object id,Object [] fields,Object obj,ISessionImplementor session)位于NHibernate.Event.Devent.AbstractFlushingEventListener.PerformExecutions(IEventSource会话)的NHibernate.Engine.ActionQueue.ExecuteActions()的.ActionQueue.ExecuteActions(IList list)C3.WebUI.Areas.Finance.Controllers.AccountsPayableController ERROR C3.WebUI.Areas. Finance.Controllers.AccountsPayableController:没有其他信息.NHibernate.PropertyValueException:在NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(字符串propertyName的)在NHibernate.Tuple.Entity APVendorId:错误脱水属性值C3.DataModel.CFAPTransaction.Vendor ---> NHibernate.HibernateException:无法解析属性.AbstractEntityTuplizer.GetPropertyValue(对象实体,字符串的PropertyPath)在NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue(对象OBJ,字符串propertyName的,EntityMode entityMode)在NHibernate.Type.EntityType.GetIdentifier(对象值,ISessionImplementor会话)在NHibernate.Type NHM的一个.ManyToOneType.NullSafeSet(IDbCommand st,Object value,Int32 index,Boolean [] settable,ISessionImplementor session)NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object [] fields,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32表,IDbCommand语句,ISessionImplementor会话,Int32索引)---内部异常堆栈跟踪结束--- 在NHibernate.Persister的NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object []字段,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32表,IDbCommand语句,ISessionImplementor会话,Int32索引) NHEnate.Persister.Entity.AbstractEntityPersister.Insert(Object id,Object []字段中的.Entity.AbstractEntityPersister.Insert(Object id,Object [] fields,Boolean [] notNull,Int32 j,SqlCommandInfo sql,Object obj,ISessionImplementor session) ,obj对象,ISessionImplementor会议)在NHibernate.Action.EntityInsertAction.Execute()在NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)在NHibernate.Engine.ActionQueue.ExecuteActions(IList的列表)在NHibernate.Engine.ActionQueue.ExecuteActions( )在NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件)的NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会话)NHibernate.Impl.SessionImpl.Flush()在NHiber nate.Transaction.AdoTransaction.Commit()位于C:\ projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs中的C3.DataModel.Repositories.NHUnitOfWork.Save()位于C3.WebUI的第2659行. C:\ projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:lines 434中的Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel model)

查询数据库时似乎没有出现这种情况.我有一种感觉,我创建一堆对象,关联它们,然后试图坚持它们有问题,但这是一个纯粹的猜测.

小智 16

nhibernate可能没有显示错误的正确属性,检查映射文件中的相邻属性,查找数据库中数据类型与.net中的数据类型或属性中重复列之间的关系中的错误...也检查这个链接Fluent NHibernate - IndexOutOfRange

  • 嗯...不,看看6年后的情况,它仍然是神秘的,是一个可怕的错误信息. (6认同)
  • 这显然是发生了什么.我在另一个属性中输入了一个拼写错误,我想这会影响到这个.我不会有这个问题,除了消息是如此令人讨厌的神秘. (4认同)
  • 这并不神秘 - 只需查看您粘贴的信息中的内部异常即可. (3认同)