2012-07-23 79 views
3

在此代碼..嵌套事務在根回滾時回滾嗎?

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'. 
} 

什麼交易將同一個根一起被回滾 - 它會只nestedOnenestedOnenestedTwo

回答

5

nestedOne將加入根作用域,因此如果根作用域將回滾,nestedOne也將回滾,但不是nestedTwo,這是一個單獨的事務。

就像您有「RequireNew」選項,將事務與封閉事務分開,您可以使用「Suppress」選項停止該範圍的事務。

請看下面的MSDN列表,它提供了有關交易行爲的很好的教訓。 http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx