【问题标题】:Am I using TransactionScope and DataContext properly?我是否正确使用 TransactionScope 和 DataContext?
【发布时间】:2023-03-12 03:13:01
【问题描述】:

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

【问题讨论】:

  • 只是为了澄清:你为什么使用两个数据上下文?两个数据库?

标签: linq-to-sql transactionscope msdtc


【解决方案1】:

SubmitChanges将参与TransactionScope

如果SubmitChanges 找到一个环境事务,它会加入该事务,否则它会在SubmitChanges 方法的生命周期内自己创建一个事务。

SubmitChanges中有一个关于事务处理的MSDN Article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2014-05-15
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多