Entity Framework 长时间运行操作的超时问题及解决方法
在 Entity Framework (EF) 中,长时间运行的操作,例如函数导入,有时可能会导致超时,超过默认的 30 秒阈值。解决此问题需要了解正确的配置方法。
解决默认命令超时问题
一种方法是修改 App.Config 文件中的连接字符串,添加 "Default Command Timeout=300000"。但是,正如示例所示,此方法无效。相反,需要在存储库类中直接设置 CommandTimeout:
<code class="language-csharp">public IEnumerable<trekmatches> GetKirksFriends() { this.context.CommandTimeout = 180; return this.context.GetKirksFriends(); }</code>
这确保了为相关操作专门设置超时时间。
覆盖连接字符串超时设置
需要注意的是,在连接字符串中指定 Default Command Timeout 可能与在存储库中手动设置的 CommandTimeout 冲突。为避免此问题,请从连接字符串中移除超时设置。
Bug 和 Entity Framework 版本
在连接字符串中指定默认命令超时存在已知的 EF Bug。此 Bug 可以通过直接在数据上下文对象上设置超时来解决。语法因使用的 EF 版本而异:
Entity Framework Core 1.0:
<code class="language-csharp">this.context.Database.SetCommandTimeout(180);</code>
Entity Framework 6:
<code class="language-csharp">this.context.Database.CommandTimeout = 180;</code>
Entity Framework 5:
<code class="language-csharp">((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;</code>
Entity Framework 4 及以下版本:
<code class="language-csharp">this.context.CommandTimeout = 180;</code>
通过实现这些设置,可以有效地解决 EF 在长时间运行操作期间超时的问题。
以上是如何有效解决实体框架长时间运行的超时问题?的详细内容。更多信息请关注PHP中文网其他相关文章!