Entity Framework のタイムアウトのトラブルシューティング
Persistent Entity Framework (EF) のタイムアウトは、接続文字列を調整した後でも、特に大量のデータセットを操作する場合によくある悩みの種です。 この記事では、接続文字列の CommandTimeout
設定が無効になるという既知の問題を解決します。
解決策: 直接コンテキスト構成
この問題は、EF 接続文字列の Default Command Timeout
に影響するバグに起因します。 これを解決するには、接続文字列から Default Command Timeout
を削除し、データ コンテキスト内でタイムアウトを明示的に設定します。 正しいアプローチは、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>
コンテキスト オブジェクトで CommandTimeout
プロパティを直接設定すると、問題のある接続文字列設定がバイパスされ、EF が長時間実行操作を正しく処理できるようになります。 180
を秒単位の適切なタイムアウト値に忘れずに置き換えてください。
最適なタイムアウトを見つける
実験が重要です。 より高い値 (180 秒など) から始めて、効率的なクエリ実行とデータ整合性の間のバランスが見つかるまで徐々に調整してください。 予期せぬ遅延を防ぐため、過度に高い値を避けてください。
以上が接続文字列の構成にもかかわらず、Entity Framework コマンドが依然としてタイムアウトになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。