3

CurrentSession を取得しようとすると、このエラーが発生します

NHibernate.Context.CurrentSessionContext.CurrentSession()

NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()
4

3 に答える 3

13

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>

あなたの構成はこれとは異なると確信していますが、これはセッションをバインドする方法の単なる例です。これが少し役立つことを願っています。

于 2009-07-18T18:57:32.833 に答える
11

Studio 2010 は 2 つの httpModules セクションを作成します。1 つは IIS 7 用です。nhibernate httpmodule を system.web にも必ず登録してください。

于 2010-07-29T01:36:12.553 に答える
6

セッションコンテキストで現在のセッションを設定する責任があります。Hibernate ドキュメントのこのセクションを参照してください。これを行っていない場合、取得する現在のセッションはありません。

于 2009-07-17T14:29:40.967 に答える