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中文網其他相關文章!