【问题标题】:Entity Framework Code First timeouts when using default SQL instance使用默认 SQL 实例时实体框架代码优先超时
【发布时间】:2014-01-30 10:32:07
【问题描述】:

使用实体框架连接到 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 主机的速度?

任何其他的 cmets 或建议将不胜感激。

谢谢,

弗朗索瓦

【问题讨论】:

    标签: c# entity-framework sql-server-2012-express


    【解决方案1】:

    CommandTimeout 控制等待特定命令执行的时间(例如 SELECT);当服务器无法访问且未发送任何命令时,它不会产生任何影响。 试试 ConnectionTimeout 看看是否有什么不同。

    【讨论】:

    • 感谢您的快速回复。正如我在帖子中提到的,我在所有测试中都设置了Connection Timeout=5
    • 我没有滚动查看您的连接字符串的结尾。我的错。尝试从代码中设置它,看看行为是否不同?否则我不知道还能说什么:)
    • 似乎找不到在代码中设置它的方法,因为context.Database.Connection.ConnectionTimeout 是只读的。但是,它确实反映了连接字符串中设置的Connection Timeout=5。无论如何谢谢@AZ。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多