C# – NHibernate: Error dehydrating property – What the heck is this

cnhibernate

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.

Best Answer

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