2014-01-30 1 views
0

Я вижу странное поведение таймаута при подключении к экземпляру по умолчанию 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?

Любые другие комментарии или предложения будут оценены.

Спасибо,

Франсуа

ответ

0

CommandTimeout контролирует время он ожидает конкретной команды для выполнения (а SELECT, например); он не будет иметь никакого влияния, если сервер недоступен, и никакая команда не была отправлена. Попробуйте ConnectionTimeout и посмотрите, не имеет значения.

+0

Спасибо за быстрый ответ. Как я упоминал в своем посте, я установил «Time Time = 5» во время всех тестов. – FrancoisG

+0

Я не прокрутил, чтобы увидеть конец ваших строк подключения. Виноват. попытайтесь установить его из кода и посмотреть, отличается ли поведение? в противном случае я не уверен, что еще сказать :) –

+0

Не может найти способ установить его в коде, так как 'context.Database.Connection.ConnectionTimeout' является только для чтения. Тем не менее, он отражает значение «Тайм-аут соединения = 5» в строке подключения. Спасибо в любом случае @AZ. : D – FrancoisG

 Смежные вопросы

  • Нет связанных вопросов^_^