views:

1574

answers:

3

I am getting this error when I am trying to get the CurrentSession

NHibernate.Context.CurrentSessionContext.CurrentSession() at NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()

+1  A: 

You are responsible for setting the current session on the session context. See this section of the NHibernate documentation. If you haven't done this, then there will be no current session to retrieve.

David M
+5  A: 

Hi,

Like David M said, you need to make sure you are binding your NHibernate session. Here's the way I do it right now in my ASP.NET app:

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
    }
}

I create a custom HttpModule that binds my session on every request and then I add this module to my web.config like this:

<httpModules>
  <add name="NHHttpModule" type="MyApplication.Core.NHHttpModule, MyApplication,
  Version=1.0.0.0, Culture=neutral" />   
</httpModules>

I'm sure your configuration is different then this but this is just an example of how I bind my session. Hope this helps a little.

CalebHC
+2  A: 

Studio 2010 will create 2 httpModules sections, one is for IIS 7. Be sure to register your nhibernate httpmodule in the system.web one too.

Tim Hoolihan
Genius, thanks for this answer, saved me from a massive 'egg on face' incident :)
Mark Dickinson