交易如何在nhibernate中运行?

cho*_*obo 7 c# nhibernate orm

我刚刚开始学习nHibernate,我对交易感到困惑.我知道nhibernate会跟踪会话中持久对象的所有更改,并且这些更改会在提交时发送到数据库,但这些事务的目的是什么?

如果我将代码包装在'using transaction'块中并调用commit它是否只提交事务中发生的对象更改,或者它是否提交自上次提交flush以来会话中发生的所有更改?

Baz*_*nga 2

事务的目的是确保您不会提交包含脏数据或错误的会话。考虑一下订购书籍的交易这一非常简单的情况。

您可能会执行以下操作: a) 检查此时该书是否存在。b) 阅读客户详细信息,查看他的购物车中是否有商品。c) 更新图书数量 d) 输入订单

现在考虑这样一种情况:在输入订单时遇到错误,而您希望回滚其他更改,即回滚事务时。

你怎么做呢?嗯,有很多方法。Web 应用程序的方法之一是监视 HTTP Error 对象,如下所示:

if(HttpContext.Current != null && HttpContext.Current.Error != null)
transaction.Rollback();
Run Code Online (Sandbox Code Playgroud)

理想情况下,您不应该通过使用显式事务块来破坏您的工作单元模式。尽量避免这样做