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