1

给定以下代码,方法DoDatabaseOperation()MethodAnotherContext()将包含在事务中?请注意,context1context2的类型相同,并且正在处理连接字符串。

using (EFContext context1 = new EFContext())
{
  using (TransactionScope transScope = new TransactionScope())
  {
          DoDatabaseOperation(context1);  // Call context1.functionImport to update records
          while (....) 
          {
              .................A lot of code............
              context1.SaveChanges();              
              MethodAnotherContext();          
          }
          transScope.complete();
   }
}

public void MethodAnotherContext()
    using (EFContext context2 = new EFContext())
    {
        ......................
        context2.SaveChanges();   
    }
}
4

1 回答 1

0

在 a 的生命周期内打开的相同连接字符串上的连接TransactionScope将被登记在同一个“简单”事务中(“简单”意味着:不需要分布式事务协调器)。默认情况下,EF 上下文仅在实际需要数据库交互时打开连接,然后关闭它们。它们在创建时不会打开连接。

因此,第一次打开和关闭连接是在DoDatabaseOperation. 然后,在SaveChanges和中MethodAnotherContext,更多的连接被打开和关闭,都在TransactionScope. 最后,transScope.complete();提交所有更改。

于 2013-09-10T07:49:09.600 回答