2009-12-04 17 views
6

Si usted tiene somehting así:transacciones anidadas con 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); 

¿El Scope2 TransactionScope interno también pueden deshacer?

Respuesta

14

Sí.

La transacción interna está inscrita en el mismo ámbito que la externa, y todo se revertirá. Este es el caso, ya que no inscribió la transacción interna como una nueva utilizando TransactionScopeOption.RequiereNew.

7

Consulte aquí para obtener una explicación sobre este tema: http://web.archive.org/web/20091012162649/http://www.pluralsight.com/community/blogs/jimjohn/archive/2005/06/18/11451.aspx.

Además, tenga en cuenta que el scope1.Dispose es redundante ya que scope1 se eliminará automáticamente al final del bloque using que lo declara.

+2

Este enlace está roto. – adamjford

+0

Usted dice scope.Dispose es redundante, pero lo más importante scope1.dispose deshace la transacción. – Mcanic

Cuestiones relacionadas