2013-02-12 2 views
5

Я хочу, чтобы соединение с базой данных с моим SQL Server не выполнялось быстро. Как уменьшить таймаут? Я попытался добавить Connection Timeout=1 в строку подключения, однако это, похоже, не имеет значения.Как уменьшить таймаут соединения с Entity Framework?

С Connection Timeout=500 требуется около 8 минут 30 секунд до перерыва. Это ожидается. С Connection Timeout=1, это занимает около 40 секунд до тайм-аута, который намного дольше, чем ожидалось.

Я нашел EntityConnection.ConnectionTimeout недвижимость, но только для чтения. Есть ли что-нибудь еще, что я могу сделать, чтобы уменьшить этот тайм-аут? Это проблема с Entity?

UPDATE: Вот моя строка подключения. По-прежнему требуется ~ 40 секунд до таймаута.

<add name="KofaxAdminToolsEntities" connectionString="metadata=res://*/DB.Model.KofaxAdminTools.csdl|res://*/DB.Model.KofaxAdminTools.ssdl|res://*/DB.Model.KofaxAdminTools.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MY_DATASOURCE;initial catalog=MY_CATALOG;persist security info=True;user id=MY_USER;password=MY_PASSWORD;MultipleActiveResultSets=True;App=EntityFramework;Connection Timeout=1&quot;" providerName="System.Data.EntityClient" /> 

UPDATE 2: Так я обнаружил, что тайм-аут был TCP тайм-аут, не SQL подключения таймаут. Если бы моя машина смогла добраться до хоста, решение @marc_s работало бы, однако, так как я не могу добраться до этого хоста, тайм-аут tcp вступает в игру. Кто-нибудь знает, как уменьшить тайм-аут tcp для SqlConnection?

+0

Вы можете указать его в строке соединения –

+0

Не могли бы вы разместить строку соединения? – IronMan84

+0

Ваше обновление 2 верное. На моем локальном dev у меня установлен псевдоним (используя TCP). Тайм-аут строки соединения работает, но занимает больше времени, чем все, что вы установили в строке подключения, когда я нажимаю на сервер с помощью псевдонима. Если я изменю имя источника данных на фактическое имя (а не на псевдоним), то время ожидания соединения = 1 работает так, как ожидалось. Спасибо. –

ответ

0

Поместите следующий код в конструкторе класса DbContext:

((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 1; 
+4

Это тайм-аут ** ** ** - время, в течение которого команда выполнения может использовать до истечения времени ожидания. Это имеет значение ** НИЧЕГО ** для использования ** таймаута соединения ** (максимальное время, разрешенное для ** подключения ** к открываемой базе данных) –

+0

Как насчет настройки web.config? Что-то, что можно изменить без полной перекомпиляции и публикации. – Triynko

1

Где и как вы указали, что тайм-аут соединения?

Я просто попытался и добавил это к моему соединения EF строки (с использованием EF базы данных первого) - и она работает, как ожидалось: при остановленном службы SQL Server, попытки соединения тайм-аут почти сразу ....

<add name="myEntities" 
    connectionString="metadata=res://*/People.csdl|res://*/People.ssdl|res://*/People.msl;provider=System.Data.SqlClient; 
      provider connection string=&quot;data source=.;initial catalog=mydb; 
      integrated security=True;connect timeout=1;multipleactiveresultsets=True; 
             ***************** 
      App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

(строка соединения EF распались и завернутые для ясности - это будет только одна длинная строка в вашем web.config)

Вам нужно добавить connect timeout=x (где x в секундах, любое значение больше 0 нормально) внутри значение provider connection string= значение вашей строки подключения EF.

+0

Что делает запись 'multipleactiveresultsets'? Кроме того, с какой базой данных вы подключаетесь к этому app.config? – bsara

+0

@Brandon: это для SQL Server (2005 или новее). «Multipleactiveresultsets» не является обязательным: он позволяет одновременно использовать несколько подключений SqlDataReader. –

+0

Я, случается, работаю с Blaine по этому вопросу и знаю, что он нажимает сервер MS SQL Express 2005 ... это может повлиять на все? – bsara

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