嵌套的TransactionScope回滚 - 有可能吗?

时间:2013-02-20 17:07:54

标签: vb.net transactionscope rollback

我正在尝试将两个TransactionScope包装在另一个TransactionScope中,但是当我运行该程序并在第二个事务范围中触发错误时,第一个事务不会回滚。是否有可能回滚两者,或者我最好不做其他事情。由于TransactionScope锁定了表中的行并且无法正常工作,我不得不将它们分开。

Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0))

    Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0))
    'Scope - 1
    End Using

    Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0))
    'Scope - 2
    End Using

End Using

1 个答案:

答案 0 :(得分:2)

您使用的是错误的交易范围选项。要使内部TransactionScopes在父作用域中登记,您需要使用TransactionScopeOption.Required。

当您使用RequiredScopeOption of Required时,它将在环境事务中登记(如果存在)。当您使用RequiredNew时,它不会在环境事务中登记。

A great article explaining the differences is here