所以我有一些代码可以连接数据库,非常标准。
在创建的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
以确定要做什么。
有什么想法吗?我希望它第一次失败而不是继续尝试。
答案 0 :(得分:3)
尝试将Connection Timeout=5;
添加到连接字符串,如果要为所有后续命令增加,请使用DbContext.Database.CommandTimeout = 60;