流畅的NHibernate会话在ASP.NET Web应用程序中不起作用

时间:2012-10-02 20:00:34

标签: asp.net nhibernate fluent-nhibernate

我在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的上下文中)。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试使用ManagedWebSessionContext而不是CurrentSessionContext:

ManagedWebSessionContext.Bind(HttpContext.Current, session);