私は、ディスク上のファイルにバインドされたバイナリデータを保持するNHibernateマップクラスを持っています。ビジネスロジックは非常に単純です:オブジェクトがデータベースに格納されている場合、オブジェクトがDBからロードされると、ブロブが正しくオブジェクトID NHibernate.Event.IPostDeleteEventListenerがトランザクションとうまく機能しない
- 、ブロブは、ファイルの内容で満たされている
- 、ファイルも削除され
唯一の問題は、オブジェクトがDBから削除された場合
は、私は3つの状況を処理するためにIPostDeleteEventListenerを使用されていることであればトランザクションは何らかの理由でSession.Delete()
の後にロールバックされますが、ファイルはすでに削除されていますが、レコードはDBに保存されます。その結果、アプリケーションは削除されていないオブジェクトを(再)ロードしようとします。
また、大きな問題ではなく、挿入後にトランザクションがキャンセルされると、ガベージファイルが取得されます。
これらのファイルシステム操作を実行するにはどうすればいいですかトランザクションがコミットされているときのみ?
[追加] MAYBE ...おそらく、回避策が見つかりました。 ITransaction
インターフェイスは、インターフェイスを引数として受け入れるRegisterSynchronization
メソッドを公開します。 MAYBEは回避策です:トランザクションの完了後にのみファイルを格納/削除してください。もっと調べる必要がありますが、NHibernateイベントリスナーサブシステムから直接コミット/ロールバックするためのフックする方法はありません。ファイルシステムがトランザクションされておらず、「ポストコミット」イベント公開はありませんので、それは(上位層でIE)NHのイベントシステムの外にそれをを行う方が良いでしょう
こんにちは、上の任意の進捗状況この問題?私はnhibernateフォーラム[NH-2523]であなたの問題を見ましたが、それ以来進歩はなかったようです。 – user2126375