【问题标题】:How to resolve: The transaction operation cannot be performed Exception如何解决:事务操作无法执行异常
【发布时间】:2018-11-02 18:09:12
【问题描述】:

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

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

发生的情况是,通常的数据操作正在作为控制器操作的一部分进行。

同时,有一个正在运行的过滤器将操作记录到数据库中。

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

这是发生错误的地方。

所以在我看来,有两个 SaveChanges 同时进行,所以交易被搞砸了。

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

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

【问题讨论】:

    标签: entity-framework entity-framework-core


    【解决方案1】:

    原来这个问题的答案是让 Context 成为一个临时服务:

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

    然后,我将所有存储库都更改为瞬态:

        services.AddTransient<AssociateRepository, AssociateRepository>();
    

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2018-01-30
      • 2014-10-08
      • 2015-11-16
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多