0
當使用實體框架連接到SQL Server 2012 Express默認實例時,我看到奇怪的超時行爲 - 在5.0.0和6.0.0上測試過。實體框架代碼使用默認SQL實例時的第一次超時
如果我使用服務器,通過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" />
而且任何的ConnectionString主機名需要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主機?
任何其他意見或建議,將不勝感激。
謝謝,
弗朗索瓦
感謝您的快速響應。正如我在文章中提到的,我在所有測試中都設置了「連接超時= 5」。 – FrancoisG
我沒有滾動查看連接字符串的結尾。我的錯。嘗試從代碼中設置它並查看行爲是否有所不同?否則我不知道還有什麼要說:) –
由於'context.Database.Connection.ConnectionTimeout'是隻讀的,似乎無法找到在代碼中設置它的方法。但是,它確實反映了連接字符串中設置的「Connection Timeout = 5」。無論如何感謝@AZ。 :d – FrancoisG