首页 > 解决方案 > Dapper 和 EF Core 事务失败并出现错误 SqlConnection 不支持并行事务

问题描述

我开始将 EF Core 与 Dapper 一起使用,并在调用 context.SaveChanges() 时尝试在 TransactionScope 中同时使用它们,但出现错误SqlConnection does not support parallel transactions. 代码如下:

public class TestController : ControllerBase
{
    private readonly MyDbContext dbContext;
    private readonly IDbConnection dbConnection;

    public TestController(MyDbContext dbContext,
        IDbConnection dbConnection)
    {
        this.dbContext = dbContext;
        this.dbConnection = dbConnection;
    }

    public void Test2()
    {
        using (IDbTransaction transaction = dbConnection.BeginTransaction())
        {
            Client client = new Client();
            client.ClientId = 3;
            client.Name = "New Client 3";

            dbContext.Entry<Client>(client).State = EntityState.Modified;

            List<Client> clients = new List<Client>();
            clients.Add(new Client
            {
                ClientId = 1,
                Name = "New Client 1",
            });
            clients.Add(new Client
            {
                ClientId = 2,
                Name = "New Client 2",
            });
            clients.Add(new Client
            {
                ClientId = 4,
                Name = "New Client 4",
            });

            string sql = "UPDATE Client SET Name = @Name WHERE ClientId = @ClientId;";

            try
            {
                dbConnection.Execute(sql, clients, transaction: transaction);

                dbContext.SaveChanges();

                transaction.Commit();
            }
            catch (System.Exception ex)
            {

            }
        }
    }
}

如何在单个事务范围中成功混合 EF Core 和 Dapper 操作?

标签: c#entity-framework.net-coreentity-framework-coredapper

解决方案


在 dotnet core 3.1 中,您可以尝试以下操作。但它只适用于关系数据库。

context.Database.UseTransaction((DbTransaction)transaction);
context.SaveChanges();
transaction.Commit();

推荐阅读