金融システムでかなり複雑な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.EntityMetamodel.GetPropertyIndex(String propertyName) の NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetPropertyValue(Object entity, String propertyPath) の NHibernate.Persister.Entity.AbstractEntityPersister の APVendorId。 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セッション) NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (オブジェクト id、オブジェクト [] フィールド、オブジェクト rowId、ブール [] includeProperty、ブール [] [] includeColumns、Int32 テーブル、IDbCommand ステートメント、ISessionImplementor セッションで、Int32 index) --- 内部例外スタック トレースの終了 --- at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32テーブル、IDbCommand ステートメント、ISessionImplementor セッション、Int32 インデックス) を 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 NHibernate.Engine.ActionQueue の .ExecuteActions(IList リスト)。NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource セッション) での ExecuteActions() NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent イベント) で) C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line 2659 の C3.WebUI.Areas.Finance.Controllers.AccountsPayableController の C3.DataModel.Repositories.NHUnitOfWork.Save()。 C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434 の CreatePayment(CreatePaymentModel モデル)C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line の C3.DataModel.Repositories.NHUnitOfWork.Save() での NHibernate.Transaction.AdoTransaction.Commit() での SessionImpl.Flush() C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434 の C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel モデル) の 2659C:\projects\C3\C3.DataModel.Generated\Generated\NHibernateRepositories.generated.cs:line の C3.DataModel.Repositories.NHUnitOfWork.Save() での NHibernate.Transaction.AdoTransaction.Commit() での SessionImpl.Flush() C:\projects\C3\C3.WebUI\Areas\Finance\Controllers\AccountsPayableController.cs:line 434 の C3.WebUI.Areas.Finance.Controllers.AccountsPayableController.CreatePayment(CreatePaymentModel モデル) の 2659
更新 NHibernate を DEBUG モードにすると、次のようなメッセージが表示されます。
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 NHibernate.Persister.Entity.AbstractEntityPersister.GetPropertyValue(Object obj, String propertyName, EntityMode entityMode) の .AbstractEntityTuplizer.GetPropertyValue(Object entity, String propertyPath) NHibernate.Type.EntityType.GetIdentifier(Object value, ISessionImplementor session) の NHibernate.Type .ManyToOneType.NullSafeSet(IDbCommand st, オブジェクト値, Int32 インデックス,
データベースのクエリ時にこれが発生しているようには見えません。一連のオブジェクトを作成し、それらを関連付け、それらを永続化しようとすると問題があると感じていますが、それは純粋な推測です。