如何使用Entity Framework减少连接超时?

时间:2013-02-12 21:21:18

标签: sql-server entity-framework

我想快速建立与SQL Server的数据库连接失败。如何减少超时?我尝试在我的连接字符串中添加Connection Timeout=1,但这似乎没有什么区别。

使用Connection Timeout=500,超时大约需要8分30秒。这是预料之中的。使用Connection Timeout=1,超时大约需要40秒,这比预期的要长。

我找到了EntityConnection.ConnectionTimeout属性,但它是只读的。我还能做些什么来减少这个超时吗?这是实体的问题吗?

更新:这是我的连接字符串。超时仍需要约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" />

更新2:所以我发现超时是 tcp超时,而不是 sql连接超时。如果我的机器能够到达主机,@marc_s解决方案就可以了,但是,由于我无法访问该主机,因此tcp超时发挥作用。有谁知道如何减少SqlConnection的tcp超时?

2 个答案:

答案 0 :(得分: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的值都可以) EF连接的provider connection string=值字符串。

答案 1 :(得分:0)

将以下代码放在DbContext类的构造函数中:

((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 1;
相关问题