TransactionScope
データベースが異なる場合や接続文字列が異なる場合に、MSDTC を登録します。
Rick Strahl はこれについて素晴らしい記事を書いています (彼の視点は LINQ to SQL ですが、EF にも当てはまります)。お金の段落:
TransactionScope は高レベルのトランザクション ラッパーであり、トランザクションを手動で追跡することなく、任意のコードをトランザクションに簡単にラップできます。従来、TransactionScope は分散トランザクション コーディネーター (DTC) の .NET ラッパーでしたが、その機能は多少拡張されています。懸念事項の 1 つは、DTC はリソース使用量の点でかなり高価であり、DTC サービスが実際にマシン上で実行されている必要があることです (さらに別のサービスは、クライアント インストールで特に厄介です)。
ただし、TransactionScope と SQL Server クライアント ドライバーに対する最近の更新により、単一のデータベースに対して単一の一貫した接続文字列を使用して実行している限り、DTC を必要とせずに TransactionScope クラスとその使いやすさを使用できるようになりました。上記の例では、トランザクションは DataContext の 1 つのインスタンスで動作するため、トランザクションは実際には DTC を使用せずに動作します。これは SQL Server 2008 にあります。
Rickのブログへのリンクを見つけたこのSOの質問/回答も参照してください。
そのため、同じデータベースに接続し、同じ接続文字列を使用している場合、DTC は関係ありません。