English 中文(简体)
在每个会话中开放视图的NHibernate事务-建议做法?
原标题:
  • 时间:2008-12-25 10:56:59
  •  标签:

清理一些交易逻辑,想知道其他人是如何处理的。

Ayende 的建议似乎是在服务边界处理事务。然而,这是一个ASP.NET Web应用程序,因此它没有明确的服务边界,至少目前没有。

人们做什么?

  • Create a single transaction per request in a HttpModule and handle commit on EndRequest, rollback on Error?
  • Create transactions in the actual "services" in the application and handle it multiple places?
  • Something else?
最佳回答

大多数人使用您的第一个要点中所述的请求每个会话策略。但是,我不认为事务需要在EndRequest上提交。在许多Web页面中,基于用户操作(例如,单击提交)提交事务会更容易,让EndRequest处理ISession的处理。

据我所知,没有必要创建一个HttpModule,因为相同的功能可以在global.asax中创建:http://forum.hibernate.org/viewtopic.php?t=993041

问题回答

您可以为您的服务层使用IoC容器,容器可以管理事务和Nibenrate会话。

你的WebApp控制器 => 调用(A)服务层 => 调用(B)一个或多个DAO方法/操作。

像Spring.NET这样的IoC容器将管理TX范围,例如在(A)处,并为您的DAO提供会话(B)。 提交(或回滚)将在服务层调用结束时处理。





相关问题
热门标签