いくつかの DataContext を新しく作成し、いくつかのデータを読み取り、SubmitChanges のみを TransactionScope にラップするとどうなりますか?
string conn1 = GetConn1();
string conn2 = GetConn2();
using (DataContext1 dc1 = new DataContext1(conn1))
{
List<Customer> customers = ReadSomeData(dc1);
ModifySomeCustomers(customers); //performs local modification to Customer instances
using (DataContext2 dc2 = new DataContext2(conn2))
{
List<Order> orders = ReadSomeData(dc2);
ModifySomeOrders(orders); //performs local modification to Order instances
using (TransactionScope scope = new TransactionScope())
{
dc1.SubmitChanges();
dc2.SubmitChanges();
scope.Complete();
}
}
}
最初の SubmitChanges 呼び出しは、プールから接続をフェッチし、その接続をスコープに登録することが期待されています。MS DTC が有効になっている - 2 回目の SubmitChanges 呼び出しは、トランザクションを「分散」に昇格させ、プールから接続を取得し、その接続をスコープに登録することが期待されます。
ReadSomeData が接続を開いたままにしている可能性があるため、SubmitChanges はプールから接続をフェッチしないため、スコープに接続を登録しません。