如何在两个dbContext中与EF6共享一个事务?

时间:2013-12-04 17:35:14

标签: entity-framework transactions

我正在使用EF6,我知道有两种方法可以使用事务,BeginTransaction和UseTransaction。

我只使用一个dbContext,但在我的情况下,我需要使用辅助dbContext,我需要第二个dbContext使用与主要相同的事务。我尝试使用这段代码:

using(Entities miDbContext = new Entities())
{
    using (DbContextTransaction miTransaccion = miDbContext.Database.BeginTransaction())
    {
        Entities miDbContext2 = new Entities();
        miDbContext2.DataBase.UseTransaction(miTransaccion);
    }
}

但是我在UseTransaction中收到错误,因为miTrasaccion的类型不正确。

我想知道如何在两个dbContexts之间共享相同的事务。

感谢。

2 个答案:

答案 0 :(得分:5)

您需要首先将miDbContext的连接传递给miDbContext2。

尝试以下代码。它应该工作。

Entities miDbContext2 = new Entities(miDbContext.Database.Connection, false);
miDbContext2.DataBase.UseTransaction(miTransaccion);

答案 1 :(得分:1)

使用更好的语法

添加SajidQ的答案
  miDbContext2.Database.UseTransaction(dbContextTransaction.UnderlyingTransaction);