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

EF Core 的连接弹性(Connection Resiliency)核心是自动重试因网络抖动、数据库瞬时不可用等导致的暂时性故障。最直接有效的配置方式就是使用 EnableRetryOnFailure 方法,它会为 DbContext 启用内置的重试执行策略。
对 SQL Server、PostgreSQL(Npgsql)、MySQL(Pomelo)等主流提供程序,只需在配置 DbContext 时调用 EnableRetryOnFailure() 即可启用默认策略:
示例(ASP.NET Core 中注册 DbContext):
services.AddDbContext当默认策略不满足业务场景(比如云环境波动大、或需更激进/保守的重试),可显式指定参数:
errorNumbersToAdd 是“追加”,不是“替换”——原有默认错误仍生效。示例(自定义 8 次重试,最长延迟 20 秒):
options.UseSqlServer(conn, o => o.EnableRetryOnFailure(启用了 EnableRetryOnFailure 后,普通查询和 SaveChangesAsync() 会自动重试。但一旦你显式开启事务(BeginTransactionAsync()),EF 就无法安全重试整个事务块——因为部分操作可能已提交。
InvalidOperationException:“已配置的执行策略不支持用户启动的事务”;DbContext.Database.CreateExecutionStrategy() 获取执行策略,把整个事务逻辑包进委托里执行;EnableRetryOnFailure 处理的是命令执行阶段的失败,而连接建立阶段的弹性还需靠连接字符串参数:
ConnectRetryCount=5:驱动层连接尝试次数(ADO.NET 层);ConnectRetryInterval=10:每次重连间隔(秒);Connection Timeout=30:单次连接超时,避免卡死;例如连接字符串片段:
Server=...;Database=...;ConnectRetryCount=5;ConnectRetryInterval=10;Connection Timeout=30;
基本上就这些。关键不是堆参数,而是理解重试边界——普通操作开箱即用,事务要手动兜底,连接建立和命令执行要分层防护。
以上就是EF Core连接弹性怎么配置 EF Core EnableRetryOnFailure方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号