【发布时间】:2010-07-06 23:07:34
【问题描述】:
我正在使用 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 还很陌生,所以我不确定我是否遗漏了什么。
【问题讨论】:
-
我很好奇为什么 Application_EndRequest 不会在 404 上被调用。也许这仅适用于特定的子状态代码。例如,对于 404.13(请求太大),调用 Application_EndRequest。事实上,它被 而不是 Application_BeginRequest 调用,并且几乎是立即调用,早在服务器可能接收到整个请求之前。
标签: c# nhibernate session