NHibernate的:错误脱水性能 - 到底这是什么道理? [英] NHibernate: Error dehydrating property - What the heck is this?

查看:1134
本文介绍了NHibernate的:错误脱水性能 - 到底这是什么道理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一家金融系统做一个相当复杂的NHibernate的交易,创建付款,记录台账项,检查,看看是否付款的发票的总金额,如果是的话标志着发票全额支付,等等......很多有趣的东西。 。当然它有一个单一的事务中发生



当我尝试提交更改的会议上,我得到以下错误:

 为C3.DataModel.CFAPTransaction.Vendor 
错误脱水的属性值

谷歌搜索这个不转了许多纪录。谁能告诉我这是什么意思,并在那里我需要专注我的调试工作?



更新



每请求,以下是完整的错误消息:




  NHibernate.PropertyValueException:错误的脱水性能C3.DataModel.CFAPTransaction.Vendor设定的值---> 



NHibernate.HibernateException:无法解析属性:在NHibernate.Tuple.Entity APVendorId
。 EntityMetamodel.GetPropertyIndex(字符串
propertyName的)留在
NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue
NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(对象
实体,字符串的PropertyPath) (对象
OBJ,弦乐propertyName的,EntityMode entityMode)在
NHibernate.Type.EntityType.GetIdentifier(对象的值,
ISessionImplementor会议)在
NHibernate.Type.ManyToOneType.NullSafeSet( IDbCommand的ST,对象的值,
。在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID的Int32指数,布尔[]可设置的,ISessionImplementor会话),对象[]字段,ROWID对象布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表,IDbCommand的说法,
ISessionImplementor会议的Int32指数)---内部异常
堆栈跟踪的结尾---在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID,对象[]字段,对象ROWID,布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表,IDbCommand的声明,
ISessionImplementor会议的Int32指数)在
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象ID,
Object []对象的字段,布尔[] NOTNULL,的Int32Ĵ,SqlCommandInfo SQL,$ b $对象b OBJ,ISessionImplementor会议)在
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象ID,
对象[]字段,obj对象,ISessionImplementor会议)在
NHibernate.Action .EntityInsertAction.Execute()留在
NHibernate.Engine.ActionQueue.ExecuteActions
NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)在
NHibernate.Engine.ActionQueue.ExecuteActions(IList的列表) ()留在NHibernate.Impl
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
会议)在
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent
事件) .SessionImpl.Flush()留在
C3.DataModel.Repositories.NHUnitOfWork.Save()
NHibernate.Transaction.AdoTransaction.Commit()在
C:\projects\C3\\ \\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:行
2659在
C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel
型)
C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:行
434




更新
投掷NHibernate的进入调试模式,我得到这样一堆东西:




加工级联
NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction为:
C3.DataModel.APVendor
级联NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction为
集合:C3.DataModel.APVendor.Transactions
进行级联NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction为
集合:C3.DataModel.APVendor.Transactions
进行处理级联NHibernate.Engine.CascadingAction + SaveUpdateCascadingAction为:
C3.DataModel.APVendor
NHibernate.Event.Default.AbstractFlushingEventListener错误可能不同步与会话
NHibernate.PropertyValueException数据库状态:为C3.DataModel.CFAPTransaction错误脱水属性值。供应商--->
NHibernate.HibernateException:无法解析属性:在NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex APVendorId
(字符串
propertyName的)在
NHibernate.Tuple。 Entity.AbstractEntityTuplizer.GetPropertyValue在在
NHibernate的
NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue(对象
OBJ,弦乐propertyName的,entityMode entityMode)(对象
实体,字符串的PropertyPath) .Type.EntityType.GetIdentifier在
NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand的ST,对象的值,
的Int32指数,布尔[]可设置的,ISessionImplementor会话(对象的值,
ISessionImplementor会话) )在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID,对象[]字段,对象ROWID,布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表, IDbCommand的说法,
ISessionImplementor会议的Int32指数)---内部异常
堆栈跟踪---在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID结束,对象[]字段,对象ROWID,布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表,IDbCommand的说法,
ISessionImplementor会议的Int32指数)在
NHibernate.Persister。 Entity.AbstractEntityPersister.Insert(对象ID,
Object []对象的字段,布尔[] NOTNULL,的Int32Ĵ,SqlCommandInfo SQL,
obj对象,ISessionImplementor会议)在
NHibernate.Persister.Entity。 AbstractEntityPersister.Insert(对象ID,
对象[]字段,obj对象,ISessionImplementor会话)留在
NHibernate.Engine.ActionQueue.Execute
NHibernate.Action.EntityInsertAction.Execute()(IExecutable可执行文件)在在
NHibernate.Engine.ActionQueue.ExecuteActions
NHibernate.Engine.ActionQueue.ExecuteActions(IList的列表)()在
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
会议)
C3.WebUI.Areas.Finance.Controllers.AccountsPayableController错误C3.WebUI.Areas.Finance.Controllers.AccountsPayableController:
无附加信息。
NHibernate.PropertyValueException:为C3.DataModel.CFAPTransaction.Vendor错误脱水属性值--->
NHibernate.HibernateException:在NHibernate.Tuple.Entity.EntityMetamodel APVendorId
:无法解析财产.GetPropertyIndex(字符串
propertyName的)留在
NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue
NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(对象
实体,字符串的PropertyPath)(目标
OBJ,弦乐propertyName的,entityMode entityMode)留在
NHibernate.Type.ManyToOneType.NullSafeSet $​​ b $ b NHibernate.Type.EntityType.GetIdentifier(对象的值,
ISessionImplementor会话)(IDbCommand的ST,对象的值,
的Int32指数,布尔[]可设置的,ISessionImplementor会议)在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID,对象[]字段,对象ROWID,布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表,IDbCommand的说法,
ISessionImplementor会议的Int32指数)---内部异常
堆栈跟踪的结尾---在
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象
ID,对象[]字段,对象ROWID,布尔[] includeProperty,
布尔[] [] includeColumns,的Int32表,IDbCommand的说法,
ISessionImplementor会议的Int32指数)在
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象ID,
Object []对象的字段,布尔[] NOTNULL,的Int32Ĵ,SqlCommandInfo SQL,
obj对象,ISessionImplementor会议)在
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象ID,
对象[]字段,obj对象,ISessionImplementor会议)在
NHibernate.Action。 EntityInsertAction.Execute()留在
NHibernate.Engine.ActionQueue.ExecuteActions
NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)在
NHibernate.Engine.ActionQueue.ExecuteActions(IList的列表)( )留在NHibernate.Impl
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
会议)在
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent
事件)。 SessionImpl.Flush()留在
C3.DataModel.Repositories.NHUnitOfWork.Save()
NHibernate.Transaction.AdoTransaction.Commit()在
C:\projects\C3\ C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:行
2659在
C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel
型)在
C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:行
434




它不会出现在查询数据库时这正在发生。我有一种感觉它有问题,我创建了一堆的对象,有关它们,然后试着坚持他们,但是这是一个纯粹的猜测。


解决方案

这可能是NHibernate的不示值误差的正确的属性,检查相邻的属性在映射文件中,从您的数据库和数据类型在性能.NET或重复列中的数据类型之间的关系,寻找错误......还要检查该链接功能NHibernate - IndexOutOfRange


I'm doing a fairly complex NHibernate transaction in a financial system, creating a payment, recording the ledger entries, checking to see if the payment is the total amount of an invoice, if so marking the invoice as paid in full, etc... lots of fun stuff. Naturally it has to happen inside a single transaction.

When I try to commit the change to the session, I get the following error:

Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor

Googling this did not turn up many record. Can someone tell me what this means and where I need to focus my debugging efforts?

UPDATE

Per request, here is the full error message:

NHibernate.PropertyValueException: Error dehydrating property v  alue for C3.DataModel.CFAPTransaction.Vendor --->

NHibernate.HibernateException: Unable to resolve property: APVendorId at NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName) at NHibernate.Tuple.Entity.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, Object value, Int32 index, Boolean[] settable, ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) --- End of inner exception stack trace --- at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) at NHibernate.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.ExecuteActions(IList list) at NHibernate.Engine.ActionQueue.ExecuteActions() at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) at NHibernate.Impl.SessionImpl.Flush() at NHibernate.Transaction.AdoTransaction.Commit() at C3.DataModel.Repositories.NHUnitOfWork.Save() in C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line 2659 at C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel model) in C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434

UPDATE Throwing NHibernate into DEBUG mode, I get a bunch of stuff like this:

processing cascade 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.APVendor.Transactions done processing cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: C3.DataModel.APVendor NHibernate.Event.Default.AbstractFlushingEventListener ERROR Could not synchronize database state with session NHibernate.PropertyValueException: Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor ---> NHibernate.HibernateException: Unable to resolve property: APVendorId at NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName) at NHibernate.Tuple.Entity.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, Object value, Int32 index, Boolean[] settable, ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) --- End of inner exception stack trace --- at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) at NHibernate.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.ExecuteActions(IList list) at NHibernate.Engine.ActionQueue.ExecuteActions() at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) C3.WebUI.Areas.Finance.Controllers.AccountsPayableController ERROR C3.WebUI.Areas.Finance.Controllers.AccountsPayableController: No additional information. NHibernate.PropertyValueException: Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor ---> NHibernate.HibernateException: Unable to resolve property: APVendorId at NHibernate.Tuple.Entity.EntityMetamodel.GetPropertyIndex(String propertyName) at NHibernate.Tuple.Entity.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, Object value, Int32 index, Boolean[] settable, ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) --- End of inner exception stack trace --- at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) at NHibernate.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.ExecuteActions(IList list) at NHibernate.Engine.ActionQueue.ExecuteActions() at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) at NHibernate.Impl.SessionImpl.Flush() at NHibernate.Transaction.AdoTransaction.Commit() at C3.DataModel.Repositories.NHUnitOfWork.Save() in C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line 2659 at C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel model) in C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434

It does not appear this is occurring when querying the database. I have a feeling it has problems with me creating a bunch of objects, relating them, and then trying to persist them, but that's a pure guess.

解决方案

It's likely that nhibernate is not showing the correct property of error, check the adjacent properties in the mapping file, looking for errors in relationship between data types from your database and data types from .net or repeated columns in properties... also check this link Fluent NHibernate - IndexOutOfRange

这篇关于NHibernate的:错误脱水性能 - 到底这是什么道理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆