Prima di tutto, c'è nessuna transazione nidificata in SQL Server . Questo è importante.
In secondo luogo, entrambi TransactionScope utilizzano conn1 quindi (a livello di SQL Server) si sta incrementando @@TRANCOUNT
per ogni BEGIN TRANSACTION
Spiegazione semplice:viene eseguito il commit della transazione interna quando viene eseguito il commit della transazione esterna perché il rollback di quella interna verrebbe ripristinato entrambi transazioni
Cioè, COMMIT TRANSACTION
(implicito da .Complete
e .Dispose
) decrementa @@TRANCOUNT
mentre ROLLBACK TRANSACTION
(implicito da .Dispose
solo) lo riporta a zero. Quindi il rollback interno viene soppresso a causa di "nessuna cosa come le transazioni nidificate"
Se avessi usato correttamente conn2 nell'ambito interno, funzionerebbe come previsto perché le 2 transazioni non sono correlate a livello di server di database. Che è dove conta...