c# - 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 操作?
解决方案
在 dotnet core 3.1 中,您可以尝试以下操作。但它只适用于关系数据库。
context.Database.UseTransaction((DbTransaction)transaction);
context.SaveChanges();
transaction.Commit();
推荐阅读
- php - 带有 100kb JSON blob 的非常慢的 apache 请求
- php - 如何修复 WooCommerce 中的 PayPal IPN 验证错误?
- c# - 在 DynamoDB AWS C# .net core 中应用查询
- javascript - 用间隔反应更新状态
- wordpress - Wordpress API - 访问页面字段
- c++ - 自动转换为无效未使用的变量 C++
- android - 将 CSV 文件从 Android 设备传输到 PC
- android - 当我更新 ListView 上的列表时,Flutter 页面不会重新加载
- java - Intellij java.lang.NoSuchFieldError 更新后启动
- google-cloud-platform - 将 Google Cloud Bucket 下载到本地计算机上的特定文件夹