Application_EndRequest不会在404上触发

时间:2010-03-15 21:39:25

标签: c# nhibernate session

我正在使用ASP MVC 2和Nhibernate。我已经创建了一个HTTP模块,如夏天的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相当新,所以我不确定我是否遗漏了什么。

1 个答案:

答案 0 :(得分:3)

您可以在application_error中处置和回滚会话。将session.close更改为session.dispose并检查它是否尚未处理。