在 Entity Framework 中设置数据库超时时间

181

我的命令一直超时,因此我需要更改默认的命令超时值。

我找到了 myDb.Database.Connection.ConnectionTimeout,但它是只读的。

我该如何在 Entity Framework 5 中设置命令超时?


20
FYI,在EF6中,Database.CommandTimeout不再是只读的。 - itsho
2
@itsho 他在谈论 Database.Connection.ConnectionTimeout。无论如何,我认为如果你的查询超时(异常 System.Data.Entity.Core.EntityCommandExecutionException 包含 System.Data.SqlClient.SqlException: Timeout expired.),那么 Database.CommandTimeout 才是正确的选择。 - David Ferenczy Rogožan
3
可能是Entity Framework超时问题的重复问题。 - Tim Pohlmann
2
我假设你实际上并不关心连接超时,而是想要调整命令超时。 - Worthy7
11个回答

-2

您应该在web.config中的Connection String标签中进行更改,并在其构造函数中使EntityFrameWork从中读取。

  1. 将此术语添加到web.config Connection String中: Connection Timeout=300;

  2. 在构造函数中添加以下代码:

    Database.CommandTimeout = Database.Connection.ConnectionTimeout;

通过这种方法,您将使用户能够控制超时时间,而无需为他进行新的发布。


1
如前所述:连接超时不等于命令超时。在这里重要的是命令超时。 - Gert Arnold
这种方法是从连接字符串动态读取它,而不是为其设置单独的设置。 - Wael Galal El Deen
那个细节我没注意到,这立刻展示了这种hack的问题。这是完全意料之外的,而且永远不应该这样做。 - Gert Arnold
黑客检查应该从其他地方进行,我认为命令的超时时间应该足够长,以执行长查询或SQL命令。因此,网站管理员应该能够根据自己的需求控制这个时间段,而不必为了更改命令超时时间而发布新内容。 - Wael Galal El Deen
不要通过滥用连接字符串中的Connection Timeout设置来解决问题!下一个应用程序管理员将设置其他值,而不知道其影响。而且,请记住,它还会设置连接超时时间(显然)。如果由于某些意外情况导致连接不可用,您不希望人们等待5分钟。 - Gert Arnold

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