You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft.EntityFrameworkCore执行DbCommand失败的原因排查求助

问题分析与解决方案

根因判断

  • 核心问题大概率是Azure SQL的瞬态故障,比如临时网络抖动、数据库节点切换、短暂资源争用等。这类错误并非SQL语句本身存在问题,也不会在Azure SQL的锁或超时日志中留下痕迹,哪怕是毫秒级的短查询也可能触发。
  • EF Core默认未开启瞬态故障重试机制,遇到这类临时错误会直接抛出异常,导致日志中出现Failed executing DbCommand的报错,即便实际耗时远低于超时设置。

NLog规则的疑问解答

  • NLog规则里使用"logger": "*"本身没有问题,它只是捕获所有日志的Error/Fatal级别信息,和SQL执行失败没有直接关联。
  • final: true的作用是让这条规则处理完日志后不再传递给其他规则,同样不会影响SQL语句的执行结果,只是日志路由的配置,并非报错的原因。

解决建议

  • 给EF Core配置瞬态故障重试策略:借助Microsoft.EntityFrameworkCore.SqlServer包中的EnableRetryOnFailure()方法,在DbContext的配置中开启,示例代码如下:
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            yourConnectionString,
            options => options.EnableRetryOnFailure(
                maxRetryCount: 5,
                maxRetryDelay: TimeSpan.FromSeconds(30),
                errorNumbersToAdd: null));
    }
    
    配置后,遇到Azure SQL的瞬态错误时,EF会自动重试,避免不必要的报错。
  • 当前NLog规则可以保留,但如果存在其他需要处理Error级别日志的规则,需注意final: true会阻断后续规则的执行,可根据实际需求调整该配置。

内容的提问来源于stack exchange,提问作者Andrew Duffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:48:10