En primer lugar, hay no existen transacciones anidadas en SQL Server . Esto es importante.
En segundo lugar, ambos TransactionScopes usan conn1, por lo que está (en el nivel de SQL Server) incrementando @@TRANCOUNT
para cada BEGIN TRANSACTION
Explicación simple:la transacción interna se confirma cuando se confirma la transacción externa porque revertir la interna revertiría ambos transacciones
Es decir, COMMIT TRANSACTION
(Implicado por .Complete
y .Dispose
) decrementa @@TRANCOUNT
while ROLLBACK TRANSACTION
(implicado por .Dispose
solamente) lo devuelve a cero. Por lo tanto, la reversión interna se suprime debido a que "no existen transacciones anidadas"
Si hubiera usado conn2 correctamente en el ámbito interno, funcionaría como se esperaba porque las 2 transacciones no están relacionadas en el nivel del servidor de la base de datos. Que es donde importa...