每个会话的Open View中的NHibernate事务 - 建议的做法?

时间:2008-12-25 10:57:00

标签: nhibernate transactions

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

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

人们做什么?

  • 在HttpModule中为每个请求创建一个事务并在EndRequest上处理提交,在Error上回滚?
  • 在应用程序的实际“服务”中创建事务并处理多个位置?
  • 别的什么?

2 个答案:

答案 0 :(得分:1)

您可以将IoC容器用于服务层,容器可以管理事务和Nibenrate会话。

您的WebApp Controller =>呼叫(A)服务层=>调用(B)一个或几个DAO方法/操作。

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

答案 1 :(得分:0)

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

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