Я наблюдаю странное поведение при тайм-ауте при подключении к экземпляру SQL Server 2012 Express по умолчанию с использованием Entity Framework - проверено на 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" />
If I add a port, it takes 42 seconds:
<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" />
And any connectionstring with hostname takes 14 seconds, but if DNS resolves and host is offline; or online host doesn't have a SQL instance, it's back to 73 seconds e.g.
<connectionStrings>
<add name="TestContext" connectionString="Server=dev-pc;Database=TestDb;User ID=sa;MultipleActiveResultSets=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
I have tried:
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"){}
}
}
Вопросы:
Это ожидаемое поведение Entity Framework (или базового поставщика)?
Какой тайм-аут следует в этой ситуации?
Поскольку 73-секундный тайм-аут слишком велик, что можно сделать, чтобы ускорить обнаружение автономных узлов SQL?
Будем признательны за любые другие комментарии или предложения.
Спасибо,
Франсуа