[英]Entity Framework Code First timeouts when using default SQL instance
使用实体框架连接到SQL Server 2012 Express默认实例时,我看到奇怪的超时行为-在5.0.0和6.0.0上测试。
如果按IP地址使用处于脱机状态的服务器,则EF似乎会忽略连接字符串中的任何超时值。
此连接字符串始终需要73秒才能超时:
<connectionStrings>
<add name="TestContext" connectionString="Server=10.0.0.2;Database=TestDb;User ID=sa;MultipleActiveResultSets=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
如果添加端口,则需要42秒:
<connectionStrings>
<add name="TestContext" connectionString="Server=10.0.0.2,1433;Database=TestDb;User ID=sa;MultipleActiveResultSets=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
并且任何具有主机名的连接字符串都需要14秒钟,但是如果DNS解析并且主机处于脱机状态; 或在线主机没有SQL实例,则返回到73秒,例如
<connectionStrings>
<add name="TestContext" connectionString="Server=dev-pc;Database=TestDb;User ID=sa;MultipleActiveResultSets=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
我努力了:
context.Database.CommandTimeout = 5;
结果没有变化。 这是预料之中的,因为它甚至没有进入查询。
这是我继承的DbContext类:
namespace Test.DataLayer
{
public class TestContext: DbContext
{
public DbSet<Person> People { get; set; }
static TestContext()
{
Database.SetInitializer<TestContext>(null);
}
public TestContext()
: base("Name=TestContext"){}
}
}
问题:
这是预期的实体框架(或基础提供程序)行为吗?
在这种情况下会发生什么超时?
由于73秒的超时时间太长,可以采取什么措施来加快对脱机SQL主机的检测?
任何其他意见或建议,将不胜感激。
谢谢,
弗朗索瓦
CommandTimeout控制等待特定命令执行的时间(例如SELECT); 当服务器不可访问并且没有发送命令时,它将不会有任何影响。 尝试使用ConnectionTimeout看看是否有任何区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.