Първо, има няма такова нещо като вложена транзакция в SQL Server . Това е важно.
Второ, и двата TransactionScope използват conn1, така че вие (на ниво SQL Server) увеличавате @@TRANCOUNT за всеки BEGIN TRANSACTION
Просто обяснение:вътрешната транзакция се ангажира, когато външната транзакция се ангажира, защото връщането назад на вътрешната би върнало назад и двете транзакции
Това е COMMIT TRANSACTION (подразбира се от .Complete и .Dispose ) намалява @@TRANCOUNT докато ROLLBACK TRANSACTION (подразбира се от .Dispose само) го връща обратно до нула. Така че вътрешното връщане назад е потиснато поради „няма такова нещо като вложени транзакции“
Ако сте използвали conn2 правилно във вътрешния обхват, той ще работи както се очаква, тъй като 2-те транзакции не са свързани на ниво сървър на база данни. Което има значение...