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