Zunächst einmal gibt es keine verschachtelten Transaktionen in SQL Server . Das ist wichtig.
Zweitens verwenden beide TransactionScopes conn1, sodass Sie (auf SQL Server-Ebene) @@TRANCOUNT
inkrementieren für jede BEGIN TRANSACTION
Einfache Erklärung:Die innere Transaktion wird festgeschrieben, wenn die äußere Transaktion festgeschrieben wird, da ein Zurücksetzen der inneren Transaktion beide rückgängig machen würde Transaktionen
Das heißt, COMMIT TRANSACTION
(impliziert durch .Complete
und .Dispose
) verringert @@TRANCOUNT
während ROLLBACK TRANSACTION
(impliziert durch .Dispose
nur) nimmt es auf Null zurück. Das innere Rollback wird also unterdrückt, weil "es keine verschachtelten Transaktionen gibt"
Wenn Sie conn2 im inneren Bereich korrekt verwendet hätten, würde es wie erwartet funktionieren, da die beiden Transaktionen auf Datenbankserverebene nicht miteinander verbunden sind. Worauf es ankommt...