これはWebアプリケーション環境にあります。「セッションが終了しました!」 NHibernate
最初の要求は正常に完了できますが、追加の要求はNHibernateフレームワークから「セッションがクローズ」応答を返します。私は、次のコードでHttpModuleをのアプローチを使用しています:
public class MyHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += ApplicationEndRequest;
context.BeginRequest += ApplicationBeginRequest;
}
public void ApplicationBeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(SessionFactory.Instance.OpenSession());
}
public void ApplicationEndRequest(object sender, EventArgs e)
{
ISession currentSession = CurrentSessionContext.Unbind(
SessionFactory.Instance);
currentSession.Dispose();
}
public void Dispose() { }
}
SessionFactory.InstanceはISessionFactoryオブジェクトを返すようにFluentNHibernateを使用して、私のシングルトン実装です。
public class MyObjectRepository : IMyObjectRepository
{
public MyObject GetByID(int id)
{
using (ISession session = SessionFactory.Instance.GetCurrentSession())
return session.Get<MyObject>(id);
}
}
これは、アプリケーションのコードのような呼び出すことができます:私のリポジトリクラスで
は、私は、次の構文を使用しようとするIMyObjectRepository repo = new MyObjectRepository();
MyObject obj = repo.GetByID(1);
私は疑い私のリポジトリのコードを持っています責任を負うことですが、実際に実装するには100%確実ではありません。
同様の問題がSO hereで見つかりました。私も実装でWebSessionContextを使用していますが、カスタムSessionManagerを作成する以外の方法はありませんでした。単純なCRUD操作では、組み込みのツール(WebSessionContextなど)とは別にカスタムセッションプロバイダが必要ですか?