2008-12-25 26 views
1

清理一些事务性逻辑,并想知道其他人如何处理它。NHibernate事务在每个会话的开放视图 - 建议的做法?

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

人们在做什么?

  • 在HttpModule中为每个请求创建单个事务并处理对EndRequest的提交,回滚出错?
  • 在应用程序中的实际“服务”中创建事务并处理多个地方?
  • 还有别的吗?

回答

0

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

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

1

您可以为您的服务层使用IoC容器,并且容器可以管理事务和Nibenrate会话。 (A)Service Layer =>调用(B)一个或多个DAO方法/操作。

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

相关问题