Asp.net HttpModule中的NHibernate会话和事务管理
我在web上见过许多人在HttpModule中管理他们的NHibernate会话和事务的实现 HttpModule:Asp.net HttpModule中的NHibernate会话和事务管理,asp.net,nhibernate,Asp.net,Nhibernate,我在web上见过许多人在HttpModule中管理他们的NHibernate会话和事务的实现 HttpModule: 在请求开始时创建会话 将整个请求包装到事务中 在请求结束时提交事务 如果人们使用此策略,他们将如何处理以下情况: 请求进来了 从数据库检索对象 更新对象 对象验证失败 对对象的更改仍然保持不变,因为事务是在HttpModule中提交的 在上述场景中,似乎没有回滚事务的好方法。我唯一能想到的计划是: 在更新我的域对象之前,以保证成功的方式编写我的验证(将我的验证从域模型中删除) 管
鉴于有这么多人似乎在使用HttpModule方法,我希望有第三种方法来管理这个场景,这是我没有想到的?您可以使用某种全局异常处理。现在我使用的是
System.AppDomain.CurrentDomain.UnhandledException
。在这个处理程序中,您需要调用Transaction.Rollback()
;另外,condsider设置一些标志(也仅在当前请求期间有效),该标志将指示您是否需要提交事务或回滚。这可以使代码更加清晰
编辑
或者,您可以使用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));
}
我最近也遇到了同样的问题。我从NHibernate开始做一些项目。我的最后一种方法是在IOC中使用Autofac,在会话中使用HttpRequestScope。以及业务存储库级别上的所有事务操作。也许这不是最好的,但目前它运行良好..验证更改而不是验证应用于实体的更改要容易得多。您找到答案了吗?