0

ASP.NET MVC3プロジェクトで(Fluent)NHibernateを使用しています。カスタムHttpModuleを実装することにより、リクエストごとに1つのNHibernateセッションを開くという標準的なアプローチを使用しています。セッションはBeginRequestで開かれ、EndRequestで閉じられます。

Pre / Post Insert / Updateイベントにフックして、エンティティの履歴ログを書き込みます。これらのイベントハンドラーにエンティティを保存しようとすると、問題が発生します。これらのイベントハンドラーの前にEndRequestがすでに呼び出されているように見えるため、NHibernateセッションはすでに閉じられています。

履歴エンティティを保存できるように、セッションの終了を遅らせるにはどうすればよいですか?rhino commonsでいくつかのHttpModuleを調べましたが、私の状況ではやり過ぎのようです。

4

1 に答える 1

1

Ayende によるこの投稿をチェックしてみてください。Revin Hart のコメントで答えが見つかると思います。Ayende と Revin は、子セッションで変更ログ エンティティの保存を処理することについて話しています。

ISession newSession = ev.Source.PersistenceContext.Session.GetSession();

foreach (ScheduleChangeLog changeLog in logs)
{
    changeLog.UpdatedBy = Username;
    newSession.Save(changeLog);
}
于 2012-07-31T04:33:13.757 に答える