我遇到此错误,但无法解决:
System.Data.SqlClient.SqlException:'无法执行事务操作,因为有正在处理的未决请求。'
这是作为控制器操作的一部分进行的常规数据操作。
同时,正在运行一个筛选器,该筛选器将操作记录到数据库中。
this._orderEntryContext.ServerLog.Add(serverLog);
return this._orderEntryContext.SaveChanges() > 0;
这是发生错误的地方。
所以在我看来,同时有两个SaveChanges正在进行,因此交易受到限制。
不确定如何解决。它们都使用通过DI获得的相同上下文。一种解决方法是手动创建第二个上下文,但我宁愿坚持使用DI模式。但是我不知道如何在DI中创建第二个Db上下文,即使那是个好主意。
也许我应该在两个调用上都使用SaveChangesAsync()以确保它们不会互相踩踏?
答案 0 :(得分:0)
最终的答案是使Context成为临时服务:
services.AddDbContext<OrderEntryContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
然后,我将所有存储库都更改为临时存储库:
services.AddTransient<AssociateRepository, AssociateRepository>();