FluentnHibernateの奇妙な動作を目撃しています。この問題には、「Page」オブジェクトと「Metadata」オブジェクトの2つのオブジェクトが関係しています。ページには複数のメタデータオブジェクトを添付でき、マッピングは次のように行われます。
'in PageMap
HasMany(Function(x) x.MetaData).Cascade.All()
'in MetaDataMap
References(Function(x) x.Page)
保存プロセスで問題が発生します。ページオブジェクトへの変更を保存する場合は、既存のページオブジェクトを取得し、変更のリストを実行してから、Session.Update(Page)を使用して値を保存します。奇妙な動作は、データは保存されますが、ページのメタデータは2回保存されます。1回は期待どおりに保存され、もう1回はpage_idがnullの場合です。奇妙なことに、これはUpdateコマンドをコメントアウトしても発生するため、実際には更新がデータの保存を引き起こしているわけではありません。
コードをステップスルーしてデータを監視し、nHibernateを使用してPageオブジェクトにその詳細を使用させているところまでエラーを追跡しました。したがって、このメソッドを呼び出す前に、データベースにはMetdataの変更がまったく表示されていません。その後、DBは表示されません(ビジーです)が、返されるページにはメタデータが追加されています。getメソッドは次のようになります。
Public Function GetById(ByVal Id As Integer) As Cms.DataTransferObjects.Page Implements IPageManager.GetById
Dim session As ISession = NHibernateSessionManagerStore.Instance.GetSession()
Dim results As Cms.DataTransferObjects.Page
results = session.CreateCriteria(Of DataTransferObjects.Page)() _
.Add(Expression.Like("Id", Id)) _
.UniqueResult(Of DataTransferObjects.Page)()
Return results
End Function
したがって、データを保存しているものは明らかにありません。
誰かがこれに光を当てることができますか?それは私を凶暴に駆り立てています!
乾杯、マット