2011-07-03 19 views
0

我已经编写了TransactionContext类,该类在应用程序层实例化并发送到业务层和数据层,以允许嵌套事务。现在我必须决定: 1.如果需要,我应该使用显式事务并让每个函数调用开始,提交或回滚事务吗? 2.我可以隐式启动事务创建TransactionContext时,让嵌套方法只回滚我应该在事务中包装每个db调用吗?

现在,因为它更容易的代码,我会用第二种方法:没有担心开始,在每一个方法提交或回滚,只是在事务上设置回滚标志,并让最顶级的方法担心提交或回滚。问题是我不确定是否将所有数据库流量包装在事务中是一个好主意。

在事务内包装所有数据库调用时可能产生的负面影响是什么?

我的设置是ASP.NET应用程序和MSSQL服务器数据库。应用程序和数据库可能位于不同的服务器上,如果这会影响决策。

回答

3

单个SQL语句已包装在隐式事务中。在需要的地方使用事务,即在原子操作中更新多个表时。将所有调用包装到数据库中并不是一个好主意:它可能会导致吞吐量和阻塞的降低。

Altough SQL Server支持嵌套事务,他们可能无法正常工作,你可能期望:

犯下内交易是通过 的SQL Server数据库引擎 忽略。根据 最后一笔交易末尾采取的 操作,交易为 承诺或回滚。如果提交外部事务 ,则内部事务 也会提交 。如果外部交易是 回滚,则所有内部 交易也回滚, ,不管内部交易是否分别由 承诺。

参考:Nesting Transactions

相关问题