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