解决方法:无法执行事务操作异常

时间:2018-06-21 17:09:50

标签: entity-framework entity-framework-core

我遇到此错误,但无法解决:

  

System.Data.SqlClient.SqlException:'无法执行事务操作,因为有正在处理的未决请求。'

这是作为控制器操作的一部分进行的常规数据操作。

同时,正在运行一个筛选器,该筛选器将操作记录到数据库中。

this._orderEntryContext.ServerLog.Add(serverLog);
return this._orderEntryContext.SaveChanges() > 0;

这是发生错误的地方。

所以在我看来,同时有两个SaveChanges正在进行,因此交易受到限制。

不确定如何解决。它们都使用通过DI获得的相同上下文。一种解决方法是手动创建第二个上下文,但我宁愿坚持使用DI模式。但是我不知道如何在DI中创建第二个Db上下文,即使那是个好主意。

也许我应该在两个调用上都使用SaveChangesAsync()以确保它们不会互相踩踏?

1 个答案:

答案 0 :(得分:0)

最终的答案是使Context成为临时服务:

services.AddDbContext<OrderEntryContext>(options =>
          options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);

然后,我将所有存储库都更改为临时存储库:

    services.AddTransient<AssociateRepository, AssociateRepository>();