NHibernate.HibernateException: сессия не привязана к текущему контексту
Я получаю эту ошибку, когда пытаюсь получить CurrentSession
NHibernate.Context.CurrentSessionContext.CurrentSession()
в
NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()
3 ответа
Вы несете ответственность за настройку текущего сеанса в контексте сеанса. Смотрите этот раздел документации NHibernate. Если вы этого не сделали, то не будет текущего сеанса для извлечения.
Как сказал Дэвид М, вам нужно убедиться, что вы связываете свой сеанс 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>
Я уверен, что ваша конфигурация отличается от этой, но это всего лишь пример того, как я связываю свою сессию. Надеюсь, это немного поможет.
Studio 2010 создаст 2 раздела httpModules, один для IIS 7. Обязательно зарегистрируйте свой nhibernate httpmodule в system.web.