Я использую ASP MVC 2 и Nhibernate. Я создал модуль HTTP, как показано в Summer of NHibernate 13, который выглядит так:
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(Application_BeginRequest);
context.PostRequestHandlerExecute += new EventHandler(Application_EndRequest);
}
private void Application_BeginRequest(object sender, EventArgs e)
{
ISession session = StaticSessionManager.OpenSession();
session.BeginTransaction();
CurrentSessionContext.Bind(session);
}
private void Application_EndRequest(object sender, EventArgs e)
{
ISession session = CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory);
if (session != null)
try
{
session.Transaction.Commit();
}
catch (Exception)
{
session.Transaction.Rollback();
}
finally
{
session.Flush();
session.Close();
}
}
web.config
<add name="UnitOfWork" type="HttpModules.UnitOfWork"/>
Моя проблема в том, что Application_EndRequest никогда не вызывается при ошибке 404, поэтому, если мое представление не отрисовывается, я полностью блокирую доступ к базе данных, пока не произойдет мой сброс. Я довольно новичок в NHibernate, поэтому я не уверен, что что-то упустил.