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 部分,一个用于 IIS 7。请务必在 system.web 中注册您的 nhibernate httpmodule 一个。

于 2010-07-29T01:36:12.553 回答
6

您负责在会话上下文中设置当前会话。请参阅NHibernate 文档的这一部分。如果您还没有这样做,那么将没有当前会话可以检索。

于 2009-07-17T14:29:40.967 回答