CurrentSession を取得しようとすると、このエラーが発生します
NHibernate.Context.CurrentSessionContext.CurrentSession()
で
NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()
CurrentSession を取得しようとすると、このエラーが発生します
NHibernate.Context.CurrentSessionContext.CurrentSession()
で
NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()
David M が言ったように、NHibernate セッションをバインドしていることを確認する必要があります。ASP.NET アプリで現在行っている方法は次のとおりです。
public class NHHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += ApplicationEndRequest;
context.BeginRequest += ApplicationBeginRequest;
}
public void ApplicationBeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(NHSessionFactory.GetNewSession());
}
public void ApplicationEndRequest(object sender, EventArgs e)
{
ISession currentSession = CurrentSessionContext.Unbind(
NHSessionFactory.GetSessionFactory());
currentSession.Close();
currentSession.Dispose();
}
public void Dispose()
{
// Do nothing
}
}
すべてのリクエストでセッションをバインドするカスタム HttpModule を作成し、このモジュールを次のように web.config に追加します。
<httpModules>
<add name="NHHttpModule" type="MyApplication.Core.NHHttpModule, MyApplication,
Version=1.0.0.0, Culture=neutral" />
</httpModules>
あなたの構成はこれとは異なると確信していますが、これはセッションをバインドする方法の単なる例です。これが少し役立つことを願っています。
Studio 2010 は 2 つの httpModules セクションを作成します。1 つは IIS 7 用です。nhibernate httpmodule を system.web にも必ず登録してください。
セッションコンテキストで現在のセッションを設定する責任があります。Hibernate ドキュメントのこのセクションを参照してください。これを行っていない場合、取得する現在のセッションはありません。