Za prvé, existuje žádná taková věc jako vnořená transakce v SQL Server . To je důležité.
Za druhé, oba TransactionScope používají conn1, takže (na úrovni SQL Serveru) zvyšujete @@TRANCOUNT
pro každou BEGIN TRANSACTION
Jednoduché vysvětlení:vnitřní transakce je potvrzena při potvrzení vnější transakce, protože vrácení vnitřní transakce by se vrátilo zpět obě transakce
To znamená COMMIT TRANSACTION
(předpokládá se .Complete
a .Dispose
) sníží @@TRANCOUNT
zatímco ROLLBACK TRANSACTION
(předpokládá se .Dispose
pouze) vrátí jej na nulu. Vnitřní vrácení zpět je tedy potlačeno z důvodu „žádné takové věci jako vnořené transakce“
Pokud byste správně použili conn2 ve vnitřním rozsahu, fungovalo by to podle očekávání, protože tyto 2 transakce na úrovni databázového serveru nesouvisí. Na čem záleží...