2009-12-04 7 views
6

Si vous avez somehting comme ceci:Transactions imbriquées avec TransactionScope

IBinaryAssetStructureRepository rep = new BinaryAssetStructureRepository(); 
var userDto = new UserDto { id = 3345 }; 
var dto = new BinaryAssetBranchNodeDto("name", userDto, userDto); 
using (var scope1 = new TransactionScope()) 
{ 
    using(var scope2 = new TransactionScope()) 
    { 
     //Persist to database 
     rep.CreateRoot(dto, 1, false); 
     scope2.Complete(); 
    } 
    scope1.Dispose(); 
} 
dto = rep.GetByKey(dto.id, -1, false); 

Est-ce que la TransactionScope intérieure SCOPE2 également être annulées?

Répondre

14

Oui.

La transaction interne est inscrite dans la même portée de la transaction externe et l'ensemble sera annulé. C'est le cas, car vous n'avez pas inscrit la transaction interne en tant que nouvelle en utilisant TransactionScopeOption.RequiresNew.

Questions connexes