Pertama, ada tidak ada yang namanya transaksi bersarang di SQL Server . Ini penting.
Kedua, kedua TransactionScopes menggunakan conn1 sehingga Anda (pada tingkat SQL Server) menambah @@TRANCOUNT
untuk setiap BEGIN TRANSACTION
Penjelasan sederhana:transaksi bagian dalam dilakukan ketika transaksi luar dilakukan karena memutar kembali bagian dalam akan mengembalikan keduanya transaksi
Yaitu, COMMIT TRANSACTION
(tersirat oleh .Complete
dan .Dispose
) mengurangi @@TRANCOUNT
sementara ROLLBACK TRANSACTION
(tersirat oleh .Dispose
saja) membawanya kembali ke nol. Jadi rollback bagian dalam ditekan karena "tidak ada yang namanya transaksi bersarang"
Jika Anda menggunakan conn2 dengan benar di 'lingkup dalam' itu akan berfungsi seperti yang diharapkan karena 2 transaksi tidak terkait di tingkat server basis data. Di situlah pentingnya...