c# – EF Core 2.0 TransactionScope错误

c# – EF Core 2.0 TransactionScope错误,第1张

概述我试图在EntityFramework Core 2.0的SELECT查询中使用TransactionScope.但是我收到此错误:“不支持在Ambient事务中登记.” 当我选择查询时,我们的想法是实现“NO LOCK”选项(我知道这个选项不是一个好主意,但它是供应商的要求).所以我添加了扩展方法(Entity Framework with NOLOCK) public static async 我试图在EntityFramework Core 2.0的SELECT查询中使用TransactionScope.但是我收到此错误:“不支持在AmbIEnt事务中登记.”

当我选择查询时,我们的想法是实现“NO LOCK”选项(我知道这个选项不是一个好主意,但它是供应商的要求).所以我添加了扩展方法(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 Core 2.0支持TransactionScope.但我不确定为什么我会得到这个例外.

知道为什么会这样吗?

解决方法 EF Core中尚不支持System.Transactions.该问题由 #5595: Enable support for System.Transactions和 is committed to be included in the next EF Core release 2.1跟踪.(更新:EF Core 2.1确实是 added System.Transactions support).

在此之前,如果整个要点是使用ReadUncommitted的事务,您可以尝试使用显式EF Core IDbTransactionBeginTransaction(DatabaseFacade,IsolationLevel)扩展方法.不幸的是,它不能像你当前的自定义扩展方法那样完全封装,并且需要传递DbContext实例:

public static async Task<List<T>> ToListReadUncommittedAsync<T>(this Iqueryable<T> query,DbContext context){    using (var transaction = await context.Database.BeginTransactionAsync(System.Data.IsolationLevel.ReadUncommitted))           {    {        var result = await query.ToListAsync();        transaction.Commit();        return result;    }}
总结

以上是内存溢出为你收集整理的c# – EF Core 2.0 TransactionScope错误全部内容,希望文章能够帮你解决c# – EF Core 2.0 TransactionScope错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存