我刚开始学习 nHibernate,我对事务感到困惑。我知道 nhibernate 会跟踪 session 中对持久对象的所有更改,并且这些更改会在提交时发送到数据库,但事务的目的是什么?
如果我将代码包装在“使用事务” block 中并调用提交,它是仅提交事务中发生的对象更改,还是提交自上次提交刷新以来 session 中发生的所有更改?
最佳答案
事务的目的是确保您不会提交带有脏数据或错误的 session 。考虑一个非常简单的交易案例,即订购一本书。
您可能会执行以下操作: a) 检查这本书此时是否存在。 b) 阅读客户详细信息并查看他的购物车中是否有任何东西。 c) 更新书数 d) 输入订单
现在考虑这样一种情况,当您在输入订单时遇到错误,您希望回滚其他更改,这就是当您回滚事务时。
你是怎么做到的?那么有很多方法。 Web 应用程序的一种方法是监视 HTTP 错误对象,如下所示:
if(HttpContext.Current != null && HttpContext.Current.Error != null)
transaction.Rollback();
理想情况下,您不应使用显式事务 block 来破坏您的工作单元模式。尽量避免这样做
关于c# - 事务在 nhibernate 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244289/