まず、 SQL Server でネストされたトランザクションなどはありません .これは重要です。
次に、両方の TransactionScopes が conn1 を使用するため、(SQL Server レベルで) @@TRANCOUNT
をインクリメントします。 BEGIN TRANSACTION
ごとに
簡単な説明:内側のトランザクションをロールバックすると 両方 がロールバックされるため、外側のトランザクションがコミットされると、内側のトランザクションがコミットされます。 取引
つまり、COMMIT TRANSACTION
(.Complete
によって暗示されます) および .Dispose
) @@TRANCOUNT
を減らします while ROLLBACK TRANSACTION
(.Dispose
によって暗示されます) のみ) ゼロに戻します。したがって、「ネストされたトランザクションなどがない」ため、内部ロールバックは抑制されます
内部スコープで conn2 を正しく使用した場合、2 つのトランザクションはデータベース サーバー レベルで無関係であるため、期待どおりに動作します。どこが重要なのか...