如何在Entity Framework中减少连接超时时间?

5
我想要快速将数据库连接到我的SQL Server。如何缩短超时时间?我尝试在我的连接字符串中添加“Connection Timeout=1”,但似乎没有效果。
当设置“Connection Timeout=500”时,它需要大约8分30秒才能超时。这是正常的。但是设置“Connection Timeout=1”时,它需要约40秒才会超时,这比预期时间要长得多。
我找到了“EntityConnection.ConnectionTimeout”属性,但该属性只读取。除此之外,我还能做些什么来缩短超时时间吗?这是实体(Entity)方面的问题吗?
更新: 这是我的连接字符串。它仍然需要大约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超时时间吗?


你可以在连接字符串中指定它。 - Jens Kloster
请问您能否提供您的连接字符串? - Corey Adler
你的更新2是正确的。在我的本地开发环境中,我定义了一个别名(使用TCP)。连接字符串超时可以工作,但当我使用别名命中服务器时,它需要比连接字符串设置的时间更长。如果我将数据源名称更改为实际名称(而不是别名),那么Connection Timeout=1将按预期工作。谢谢。 - Meeting Attender
2个回答

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中的一行长代码)

您需要在EF连接字符串的provider connection string=内部添加connect timeout=x(其中x以秒为单位,任何大于0的值都可以)。


multipleactiveresultsets条目是做什么用的?此外,您正在使用app.config连接到哪种类型的数据库? - bsara
@Brandon:这是针对 SQL Server(2005 或更新版本)的。multipleactiveresultsets 是可选的,它允许同时使用多个 SqlDataReader 连接。 - marc_s
我碰巧和布莱恩一起在处理这个问题,我知道他正在连接一个 MS SQL Express 2005 服务器...这会有任何影响吗? - bsara
@Brandon:不,不是在这方面。Express版和其他版本的SQL Server之间的连接字符串及其选项几乎是相同的。 - marc_s

0
将以下代码放入您的 DbContext 类的构造函数中:
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 1;

4
这是指令超时 - 在命令超时之前命令所能使用的时间段。这与连接超时(连接到数据库打开的最长时间)没有任何关系 - marc_s
网站配置文件(web.config)设置怎么样?这样可以在不进行完整重新编译和发布的情况下进行更改。 - Triynko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接