我正在金融系统中进行相当复杂的 NHibernate 交易,创建付款,记录分类帐条目,检查付款是否是发票的总金额,如果是,则将发票标记为全额支付等。 . 很多有趣的东西。自然,它必须发生在单个事务中。
当我尝试将更改提交到会话时,我收到以下错误:
Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor
谷歌搜索这个并没有出现很多记录。有人可以告诉我这意味着什么以及我需要将调试工作集中在哪里吗?
更新
根据请求,这是完整的错误消息:
NHibernate.PropertyValueException: Error dehydrating property v alue for C3.DataModel.CFAPTransaction.Vendor --->
NHibernate.HibernateException:无法解析属性:NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(Object entity, String propertyPath) 的 NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName) 在 NHibernate.Persister.Entity.AbstractEntityPersister 的 APVendorId。在 NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand st, Object value, Int32 index, Boolean[] settable, ISessionImplementor 的 NHibernate.Type.EntityType.GetIdentifier(Object value, ISessionImplementor session) session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand 语句, ISessionImplementor session,Int32 index) --- 内部异常堆栈跟踪结束 --- 在 NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 NHibernate 的 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) 的表,IDbCommand 语句,ISessionImplementor 会话,Int32 索引)。 Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session) at NHibernate.Action.EntityInsertAction.Execute() at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) at NHibernate.Engine.ActionQueue NHibernate.Engine.ActionQueue 中的 .ExecuteActions(IList 列表)。ExecuteActions() 在 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource 会话) 在 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent 事件) 在 NHibernate.Impl.SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit( ) 在 C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:C3.WebUI.Areas.Finance.Controllers.AccountsPayableController 中的 C3.DataModel.Repositories.NHUnitOfWork.Save() 中的第 2659 行。 C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434 中的 CreatePayment(CreatePaymentModel 模型)SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit() 在 C3.DataModel.Repositories.NHUnitOfWork.Save() 在 C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line 2659 在 C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel 模型)在 C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit() 在 C3.DataModel.Repositories.NHUnitOfWork.Save() 在 C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line 2659 在 C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel 模型)在 C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434
更新 将 NHibernate 投入调试模式,我得到一堆这样的东西:
Areas.Finance.Controllers.AccountsPayableController 错误 C3.WebUI.Areas.Finance.Controllers.AccountsPayableController:没有其他信息。NHibernate.PropertyValueException:为 C3.DataModel.CFAPTransaction.Vendor 脱水属性值时出错 ---> NHibernate.HibernateException:无法解析属性:NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName) 在 NHibernate.Tuple.Entity 的 APVendorId .AbstractEntityTuplizer.GetPropertyValue(Object entity, String propertyPath) at NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue(Object obj, String propertyName, EntityMode entityMode) at NHibernate.Type.EntityType.GetIdentifier(Object value, ISessionImplementor session) at NHibernate.Type .ManyToOneType.NullSafeSet(IDbCommand st,对象值,Int32 索引,
查询数据库时似乎不会发生这种情况。我有一种感觉,我创建一堆对象,关联它们,然后尝试持久化它们有问题,但这是一个纯粹的猜测。