我想在EntityFramework核心2.0中的SELECT查詢中使用TransactionScope。但是,我收到此錯誤:「不支持」加入環境事務。「EF核心2.0 TransactionScope錯誤
當我選擇查詢時,這個想法是實現「無鎖定」選項(我知道有這個選項,但它是供應商的要求不是個好主意)。所以我添加的擴展方法(Entity Framework with NOLOCK)
public static async Task<List<T>> ToListReadUncommittedAsync<T>(this IQueryable<T> query)
{
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions()
{
IsolationLevel = IsolationLevel.ReadUncommitted
}, TransactionScopeAsyncFlowOption.Enabled))
{
var result = await query.ToListAsync();
scope.Complete();
return result;
}
}
而且我也已經設置忽略環境事務警告。
public static void AddEntityFramework(this IServiceCollection services, string connectionString)
{
services.AddDbContextPool<OptomateContext>(options =>
{
options.UseSqlServer(connectionString);
options.ConfigureWarnings(x => x.Ignore(RelationalEventId.AmbientTransactionWarning));
});
}
和我有查詢,如下面我的倉庫
public async Task<Patient> GetPatient(Common.Resources.Patient patient)
{
var pat = await Dbset.Where(x => string.Equals(x.Surname,patient.Surname,
StringComparison.CurrentCultureIgnoreCase)).ToListReadUncommittedAsync();
return pat.FirstOrDefault();
}
我明白,對.NET核心2.0支持的TransactionScope。但我不知道爲什麼我得到這個例外。
任何想法爲什麼會發生這種情況?