EF6 连接需要很长时间才能失败

本文关键字:失败 长时间 连接 EF6 | 更新日期: 2023-09-27 18:36:56

所以我有一些代码连接到数据库,非常标准。

在创建的 DbContext 中,我尝试查询一个表。

当我创建 DbContext 时,我输入了一些不存在的 url,而不是实际的数据库 URL。

所以我预计在这一点上会失败,问题是,我不能让它失败的速度超过 30 秒。

我从System.Data.SqlClient.SqlInternalConnection那里得到了一堆第一次更改异常

建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)

at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction)

我尝试创建自定义DbConfiguration和 DbExecutionPolicy,但直到尝试连接很多次之后,它似乎才被调用。

public class InternalsDbConfiguration : DbConfiguration
{
    public InternalsDbConfiguration()
    {
        this.SetExecutionStrategy("System.Data.SqlClient", () =>
        {
            var r = new MyExecutionStrategy();
            return r;
        });
    }
}
public class MyExecutionStrategy : DbExecutionStrategy
{
    protected override bool ShouldRetryOn(Exception exception)
    {
        var s = exception as SqlException;
        if (s == null)
            return false;
        if (s.Number == 53)
            return false;
        return true;
    }
}

我只是不能让它以超过 30 秒的速度使连接失败,因为它一直在一些我似乎无法影响的过程中旋转,看起来像一个没有任何退缩的重试策略,在它放弃并调用我的MyConnectionStratagy来弄清楚该怎么做之前触发了 15 次。

有什么想法吗?我希望它第一次失败,不要继续尝试。

EF6 连接需要很长时间才能失败

尝试将Connection Timeout=5;添加到连接字符串,如果要增加所有后续命令,请使用DbContext.Database.CommandTimeout = 60;