当根目录回滚时,是否会回滚嵌套事务?

时间:2012-07-23 07:32:02

标签: c# sql-server transactions transactionscope rollback

在此代码中..

public static TransactionScope CreateTransactionScope(bool createNew = false)
{
    return new TransactionScope(
        createNew ? TransactionScopeOption.RequiresNew : TransactionScopeOption.Required,
        new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted });
}

实际上,在这一个......

using (TransactionScope rootScope = CreateTransactionScope())
{
    using (TransactionScope nestedOne = CreateTransactionScope())
    { nestedOne.Complete(); }

    using (TransactionScope nestedTwo = CreateTransactionScope(true))
    { nestedTwo.Complete(); }

    // No committing, rollback 'rootScope'.
}

哪些交易将与根网址一起回滚 - 是nestedOne还是nestedOnenestedTwo

1 个答案:

答案 0 :(得分:7)

nestedOne将加入根作用域,因此如果根作用域将回滚,nestedOne也将回滚,但不是nestedTwo,这是一个单独的事务。

就像你有“RequireNew”选项那样从封闭事务中分离事务,你可以使用“Suppress”选项来停止该范围的事务。

查看MSDN中的以下列表,该列表提供了有关事务行为的精彩课程。 http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx