EF Core连接弹性通过EnableRetryOnFailure自动重试暂时性故障,默认6次指数退避重试,支持SQL Server/PostgreSQL/MySQL;事务需用CreateExecutionStrategy手动包装;连接字符串应配置ConnectRetryCount等参数分层防护。

EF Core 的连接弹性(Connection Resiliency)核心是自动重试因网络抖动、数据库瞬时不可用等导致的暂时性故障。最直接有效的配置方式就是使用 EnableRetryOnFailure 方法,它会为 DbContext 启用内置的重试执行策略。
基础启用方式(推荐默认用法)
对 SQL Server、PostgreSQL(Npgsql)、MySQL(Pomelo)等主流提供程序,只需在配置 DbContext 时调用 EnableRetryOnFailure() 即可启用默认策略:
- SQL Server 默认识别错误码如 40613、40197、1205 等;
- PostgreSQL 识别 08006、08001 等连接类错误;
- 默认重试次数为 6 次,延迟采用指数退避(1s → 2s → 4s → …);
- 无需额外判断异常类型,框架自动过滤非暂时性错误(如主键冲突、语法错误)。
示例(ASP.NET Core 中注册 DbContext):
services.AddDbContext(options =>options.UseSqlServer(connectionString, sqlOptions =>
sqlOptions.EnableRetryOnFailure()));
自定义重试参数
当默认策略不满足业务场景(比如云环境波动大、或需更激进/保守的重试),可显式指定参数:
- maxRetryCount:最大重试次数(默认 6,建议设为 5–10);
- maxRetryDelay:单次最大延迟(默认 30 秒,避免长等待阻塞请求);
- errorNumbersToAdd:补充自定义可重试的 SQL 错误号(如 SQL Server 的 2、53、10054);
- 注意:
errorNumbersToAdd是“追加”,不是“替换”——原有默认错误仍生效。
示例(自定义 8 次重试,最长延迟 20 秒):
标签: mysql ai nas sqlserver .net
还木有评论哦,快来抢沙发吧~