我正确使用TransactionScope和DataContext吗?

时间:2012-07-27 18:42:34

标签: linq-to-sql transactionscope msdtc

如果我新建一些DataContexts,读取一些数据,然后只将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不会从池中获取连接,因此不会在范围内登记连接。

1 个答案:

答案 0 :(得分:2)

SubmitChanges将参与TransactionScope

如果SubmitChanges找到环境事务,它会对该事务进行登记,否则它会在SubmitChanges方法的生命周期内创建一个事务。

SubmitChanges中有关于交易处理的MSDN Article