Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 当使用NHibernate和每个请求一个工作单元时,在什么情况下,每个请求使用多个事务是有益的?_Asp.net_Nhibernate - Fatal编程技术网

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

Asp.net 当使用NHibernate和每个请求一个工作单元时,在什么情况下,每个请求使用多个事务是有益的?,asp.net,nhibernate,Asp.net,Nhibernate,在我的web应用程序中,将在BeginRequest处理程序中创建会话。对该会话执行所有数据库操作。在EndRequest处理程序中,会话用于创建事务,然后提交该事务。之后,会话被释放。这会将针对会话执行的所有数据库操作包装到单个事务中 在请求事务中创建要提交的事务何时有利?这是怎么做到的 换句话说,除了提交当前请求中执行的所有数据库操作之外,我出于什么原因创建事务,您希望将各种事情记录到数据库中—页面命中等。这可以在同一会话中愉快地发生,但您希望将页面跟踪刷新到数据库中,即使随后发生错误 为了

在我的web应用程序中,将在BeginRequest处理程序中创建会话。对该会话执行所有数据库操作。在EndRequest处理程序中,会话用于创建事务,然后提交该事务。之后,会话被释放。这会将针对会话执行的所有数据库操作包装到单个事务中

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


换句话说,除了提交当前请求中执行的所有数据库操作之外,我出于什么原因创建事务,您希望将各种事情记录到数据库中—页面命中等。这可以在同一会话中愉快地发生,但您希望将页面跟踪刷新到数据库中,即使随后发生错误

为了提高性能,您将希望在尽可能短的时间内保持事务处于打开状态。在您的请求期间,您可能正在执行许多面向非数据库的操作,在此期间,没有理由保持事务处于打开状态


很多其他的例子…

我个人不喜欢这样做,原因很简单,就是错误处理。如果您的transaction.Commit在您的主操作/请求/任何操作上失败,那么您就不知道发生了什么。然后将用户发送到一些蹩脚的错误页面或类似的页面。如果您正在执行web服务,其中可能返回指示内部错误或类似错误的结果代码,则这一点尤其正确

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

我在EndRequest上刷新的原因是为了处理可能发生在事务边界之外的任何DB活动,但是,如果您有一个跨所有站点/服务处理此活动的组件,则情况会更糟