c# - Entity Framework 6 中多个上下文的单个事务

标签 c# entity-framework-6

我们有一个场景可以在单个事务中保存来自两个上下文的两个实体。

第 1 步 - SetTransaction(firstContext, true);

第 2 步 - 使用 firstContext 保存第一个实体。

第 3 步 - SetTransaction(secondContext, false);

第 4 步 - 使用 secondContext 保存第二个实体

第 5 步 - 最后提交事务。

void function SetTransaction(context, startNewTransaction)
{    
   var currentContext = firstContext;

   if (startNewTransaction)
   {
      var connection = currentContext.GetConnection();
      connection.Open();
      this.dbTransaction = connection.BeginTransaction();
   }

   if (this.dbTransaction != null)
   {
       currentContext.UseTransaction(dbTransaction);
   }
}

在执行步骤 3 时,currentContext.UseTransaction(dbTransaction);行抛出异常为“传入的事务与当前连接无关。只能使用与当前连接关联的事务

请建议如何解决。

文卡特。

最佳答案

使用TransactionScope。 EF 将自动加入正在运行的事务范围。

这将要求您的连接字符串相同

using (var scope = new TransactionScope()) {
    // Save entity in context A
    using (var contextA = new ContextA()) {
        contextA.Save(...);
        contextA.SaveChanges;
    }
    // Save entity in context B
    using (var contextB = new ContextB()) {
        contextB.Save(...);
        contextB.SaveChanges;
    }
    // Commit tx-scope
    scope.Complete();
}

关于c# - Entity Framework 6 中多个上下文的单个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307544/

相关文章:

c# - 如果客户端被强制销毁,则向服务器发送消息

c# - ASP.NET MVC 为什么需要调用父类的空虚方法

c# - 可以更改嵌入式资源路径分隔符吗?

asynchronous - 具有异步任务的 ObjectContext ExecuteFunction

c# - 搜索字符串列表中的任何字符串是否在表中

c# - 如何从 FileStream 报告进度

c# - 我们在 C# 中有某种三重集合吗?

c# - "Update-Database"命令失败并出现 TimeOut 异常

c# - 没有逆属性的多对多

c# - LINQ to Entities in linq join with tuples 仅支持无参数构造函数和初始值设定项