Я вижу странное поведение таймаута при подключении к экземпляру по умолчанию SQL Server 2012 Express с использованием Entity Framework - проверен на 5.0.0 и 6.0.0.Код Entity Framework Первые тайм-ауты при использовании экземпляра 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"){}
}
}
Вопросы
Является ли это ожидалось Entity Framework (или базового поставщика) поведение?
Какой тайм-аут он придерживается в этой ситуации?
Поскольку таймаут 73 секунд слишком длинный, что можно сделать для ускорения обнаружения автономных узлов SQL?
Любые другие комментарии или предложения будут оценены.
Спасибо,
Франсуа
Спасибо за быстрый ответ. Как я упоминал в своем посте, я установил «Time Time = 5» во время всех тестов. – FrancoisG
Я не прокрутил, чтобы увидеть конец ваших строк подключения. Виноват. попытайтесь установить его из кода и посмотреть, отличается ли поведение? в противном случае я не уверен, что еще сказать :) –
Не может найти способ установить его в коде, так как 'context.Database.Connection.ConnectionTimeout' является только для чтения. Тем не менее, он отражает значение «Тайм-аут соединения = 5» в строке подключения. Спасибо в любом случае @AZ. : D – FrancoisG