如果我新建一些 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 已启用 - 第二次 SubmitChanges 调用预计将事务提升为“分布式”,从池中获取连接并将该连接纳入范围。
我担心 ReadSomeData 可能使连接保持打开状态,因此 SubmitChanges 不会从池中获取连接,因此不会在范围内登记连接。