首页 > 解决方案 > ReadUnCommitted 隔离级别不适用于 EF Core

问题描述

对于隔离级别“ReadUncommitted”,我们应该创建一个事务:

using var transaction = await db.Database.BeginTransactionAsync(isolationLevel: System.Data.IsolationLevel.ReadUncommitted);

try
{
    // Run the query
    await transaction.CommitAsync();
}
catch (Exception)
{ 
    await transaction.RollbackAsync();
}

但 xEvent Profiler 显示此配置文件登录:

xEvent 事件探查器

此登录配置文件正在使用“已提交读”!

根据这个问题,我们必须创建两个事务:

using var tran = await db.Database.BeginTransactionAsync(isolationLevel: System.Data.IsolationLevel.ReadUncommitted);

try
{
    // without any query
    await tran .CommitAsync();
}
catch (Exception)
{ 
    await tran .RollbackAsync();
}

using var transaction = await db.Database.BeginTransactionAsync(isolationLevel: System.Data.IsolationLevel.ReadUncommitted);

try
{
    // Run query
    await transaction.CommitAsync();
}
catch (Exception)
{
    await transaction.RollbackAsync();
}

两次打开和关闭事务似乎不是一个好主意。

如何在 EF Core 中将隔离级别设置为“未提交读取”?

标签: sql-serverentity-frameworktransactionsentity-framework-coretransaction-isolation

解决方案


推荐阅读