跨多个指向其他数据库的上下文的环境事务

时间:2017-09-02 13:05:10

标签: c# entity-framework-core dbcontext transactionscope fluent-entity-framework

设置的简短描述:

EF Core与流畅的映射一起使用。有三个数据库,每个数据库有一个上下文。问题是在两个或所有三个上下文中开始一个事务范围。 OnConfiguration方法在每个上下文中都被覆盖,如下例所示:

public class MyContext : DbContext
{
    private string _connectionString;

    public MyContext(string connectionString)
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        /* Replace a placeholder with the database name */
        optionsBuilder.UseSqlServer(string.Format(_connectionString, "database1");
    }    
}

我已尝试开始交易:

在上下文中开始事务并将其传递给另一个上下文

using (var transaction = context1.Database.BeginTransaction()) 
{
    context2.Database.UseTransaction(transaction.GetDbTransaction());
    /*do something on context1*/
    /*do something on context2*/

    transaction.Commit();
}

开始交易范围

using (var scope = new TransactionScope()) 
{
    /*do something on context1*/
    /*do something on context2*/
    /*do something on context3*/

    scope.Complete();
}

EF会抛出环境事务异常。

我在互联网上找到了另一个解决方案(丢失链接,对不起家伙)。 他们没有将连接字符串传递给上下文,而是将连接本身传递给上下文。但我不明白如何在上下文中连接到不同的数据库。

有没有人可以解决这个问题?

0 个答案:

没有答案