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

EF Core连接PostgreSQL遇Socket错误,如何配置重试机制?

解决方案

要让EF Core的重试机制处理System.Net.Socket.SocketException 11001(找不到指定主机)异常,你需要添加**08001和08006**这两个PostgreSQL错误代码到EnableRetryOnFailure的errorCodesToAdd参数中。

原因说明

当出现DNS解析失败(错误码11001)这类连接建立阶段的错误时,Npgsql会将底层Socket异常包装为NpgsqlException,并映射到PostgreSQL标准的连接类错误代码:

  • 08001:通用连接异常(connection_exception)
  • 08006:连接失败(connection_failure)

这两个代码默认不在EF Core重试机制的处理列表中,因此需要手动添加。

代码示例

services.AddDbContext<YourDbContext>(options =>
    options.UseNpgsql("你的数据库连接字符串", npgsqlOpts =>
        npgsqlOpts.EnableRetryOnFailure(
            maxRetryCount: 3, // 自定义重试次数
            maxRetryDelay: TimeSpan.FromSeconds(5), // 自定义重试间隔
            errorCodesToAdd: new[] { "08001", "08006" }
        )
    )
);

验证方式

如果不确定具体错误代码,可在异常捕获逻辑中查看NpgsqlException的SqlState属性,获取对应的PostgreSQL错误代码:

try
{
    // 数据库操作逻辑
}
catch (NpgsqlException ex)
{
    Console.WriteLine($"对应错误代码:{ex.SqlState}");
}

内容的提问来源于stack exchange,提问作者Simon K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:29:55