NHibernate.HibernateException: сессия не привязана к текущему контексту - PullRequest
3 голосов
/ 17 июля 2009

Я получаю эту ошибку, когда пытаюсь получить CurrentSession

NHibernate.Context.CurrentSessionContext.CurrentSession()

на

NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()

Ответы [ 3 ]

13 голосов
/ 18 июля 2009

Как сказал Дэвид М, вам нужно убедиться, что вы связываете свой сеанс 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>

Я уверен, что ваша конфигурация отличается от этой, но это всего лишь пример того, как я связываю свою сессию. Надеюсь, это немного поможет.

11 голосов
/ 29 июля 2010

Studio 2010 создаст 2 раздела httpModules, один для IIS 7. Обязательно зарегистрируйте ваш httphdule nhibernate в system.web.

6 голосов
/ 17 июля 2009

Вы несете ответственность за настройку текущего сеанса в контексте сеанса. См. этот раздел документации NHibernate. Если вы этого не сделали, текущий сеанс для извлечения не будет.

...