我在Web上看到很多人在HttpModule中管理他们的NHibernate会话和事务。
HttpModule:
如果人们使用此策略,他们如何处理以下情况:
在上面的场景中似乎没有好的方法来回滚事务。我能提出的唯一计划是:
看到很多人似乎都在使用HttpModule方法,我希望有第三种管理这种情况的方法,我没有想过?
答案 0 :(得分:2)
您可以使用某种全局异常处理。现在我正在使用System.AppDomain.CurrentDomain.UnhandledException
。在此处理程序中,您需要调用Transaction.Rollback()
;并且还考虑设置一些标志(仅在当前请求期间存在),这将标记您是否需要提交事务或回滚。这可以使代码更清晰。
修改强>
或者,您可以使用HttpApplication
public class HelloWorldModule : IHttpModule
{
void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
application.EndRequest +=
(new EventHandler(this.Application_EndRequest));
//this is it
applicaiton.Error +=
(new EventHandler(this.Application_Error));
}