如果外部事务范围未完成,内部事务范围是否会回退?

Teb*_*ebo 47 c# transactionscope

我有两个交易范围,一个在另一个范围内.我很想知道内部事务范围是否会在提交后回滚,而外部事务范围没有完成.

Gre*_*ech 105

它取决于您使用嵌套事务作用域启动的作用域选项.

如果使用默认选项,TransactionScopeOption.Required则嵌套作用域将在与外部作用域相同的事务中登记,因此当外部作用域回滚时,内部作用域也将回滚,即使它已调用Complete.

但是,如果您使用,TransactionScopeOption.RequiresNew则嵌套作用域将开始其自己的事务并与外部作用域分开完成,因此即使外部作用域回滚也不会回滚.

如果您使用,TransactionScopeOption.Suppress则嵌套作用域将不参与外部事务,并且将以非事务方式完成,因此如果外部事务回滚,则不会形成将回滚的工作的一部分.

  • 完美的答案:) (2认同)

Ode*_*ded 28

由于它们是嵌套的,因此内部事务将回滚.

这不是全部,而是取决于您如何创建嵌套事务,但默认情况下,它将回滚.

本文深入探讨TransactionScope并应回答您的大部分问题.


分发与否是无关紧要的.

  • 我相信你知道这一点,但在谈论TransactionScope时,"内部事务"和"嵌套事务"这两个术语是不合适的,因为实际上没有嵌套事务,只是嵌套的TransactionScopes.如果选择TransactionScopeOption.Required,它只是一个大事务,并且TransactionScopeOption.RequiresNew有2个完全独立的事务,但它们不是嵌套的(封闭的)嵌套事务. (3认同)