簡體   English   中英

使用默認SQL實例時的實體框架代碼優先超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM