1

ASP.NET Web アプリケーションに Fluent NHibernate をセットアップしました。リクエストを傍受し、それぞれに対して新しいセッションを作成する http モジュールがあります。

private static void BeginRequest( object sender, EventArgs e )
{

    ISession session = _sessionFactory.OpenSession();

    session.BeginTransaction();

    CurrentSessionContext.Bind( session );
}

次のように構成されています。

private static ISessionFactory CreateSessionFactory()
{
    return Fluently
        .Configure()
        .Database( MsSqlConfiguration.MsSql2005
            .ConnectionString( c => c
                .FromConnectionStringWithKey( "RecruitmentApp" ) ) )
        .Mappings( 
            m => m.FluentMappings.AddFromAssemblyOf<RecruitmentAppLibrary.Applicant>()
        )
        .ExposeConfiguration( c => c.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, "web"))
        .BuildSessionFactory();
}

現在のセッション コンテキスト クラスを「web」に設定していますが、_sessionFactory.GetCurrentSession() が呼び出されたときにコードがセッションを取得できません。「現在のコンテキストにバインドされたセッションはありません」と表示されます。私はそれを少しデバッグし、セッションは Http コンテキストに挿入されていますが、何らかの理由でそれを引き戻すことはできません (Page_Load が呼び出されたときにまだコンテキスト内にあるにもかかわらず)。何か案は?

4

1 に答える 1

0

CurrentSessionContextの代わりにManagedWebSessionContextを使用してみてください。

ManagedWebSessionContext.Bind(HttpContext.Current, session);
于 2012-10-03T11:05:45.673 に答える