1

设置的简短描述:

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 在每一种方式上都会引发环境事务异常。

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

有没有人解决这个问题?

4

0 回答 0