当使用NHibernate和每个请求的工作单元时,在什么情况下每个请求使用多个事务是否有益?

时间:2010-08-18 21:22:51

标签: asp.net nhibernate

在我的Web应用程序中,会在BeginRequest处理程序中创建一个Session。所有数据库操作都是针对此会话执行的。在EndRequest处理程序中,会话用于创建随后提交的事务。之后,会议处理完毕。这会将针对会话执行的所有数据库操作包装到单个事务中。

在请求事务中创建要提交的事务何时有益?这是怎么做到的?

换句话说,除了提交当前请求中执行的所有数据库操作之外,我出于什么原因创建事务?

2 个答案:

答案 0 :(得分:1)

当用户访问某个页面时,您希望将各种内容记录到数据库中 - 页面命中等。这可以在同一个会话中愉快地发生,但您希望将页面跟踪刷新到数据库,即使出现错误随后发生。

对于性能,您还希望尽可能短的时间保持您的交易开放。在您的请求期间,您可能正在执行许多非数据库导向的操作,在此期间没有理由保持交易开放。

很多其他例子......

答案 1 :(得分:0)

由于错误处理的简单原因,我个人不喜欢这样做。如果你的transaction.Commit在你的主要Action / Request / Whatever上失败了,你就没有关于发生了什么的背景。然后,您将用户发送到一些蹩脚的错误页面或类似的东西。如果您正在进行Web服务,尤其如此,您可能会返回指示内部错误或类似内容的结果代码。

我发现每次调用通常都有一个业务事务,因此,我让我的应用服务管理事务,让我们让BeingRequest处理打开Session和EndRequest以刷新会话并进行处理。

我在EndRequest上刷新的原因是处理可能在事务边界之外发生的任何数据库活动,但是,如果您有一个组件可以在所有站点/服务中处理此事件,则更是如此。

相关问题