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

时间:2015-01-09 01:25:15

标签: c# sql-server entity-framework entity-framework-6

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

在创建的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秒更快,因为它一直在旋转我似乎无法影响的一些过程,看起来像一个重试策略没有任何后退火灾像在它放弃之前15次并打电话到我的MyConnectionStratagy以确定要做什么。

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

1 个答案:

答案 0 :(得分:3)

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