Primeiro, há não existe uma transação aninhada no SQL Server . Isso é importante.
Em segundo lugar, ambos os TransactionScopes usam conn1 para que você esteja (no nível do SQL Server) incrementando
@@TRANCOUNT
para cada BEGIN TRANSACTION
Explicação simples:a transação interna é confirmada quando a transação externa é confirmada porque a reversão da transação interna reverteria ambos transações
Ou seja,
COMMIT TRANSACTION
(implicado por .Complete
e .Dispose
) diminui @@TRANCOUNT
enquanto ROLLBACK TRANSACTION
(implicado por .Dispose
apenas) leva de volta a zero. Portanto, a reversão interna é suprimida devido a "não haver transações aninhadas" Se você tivesse usado conn2 corretamente no escopo interno, funcionaria conforme o esperado porque as 2 transações não estão relacionadas no nível do servidor de banco de dados. Que é onde importa...