Entity Framework のタイムアウトへの取り組み: 包括的なガイド
大規模なデータセットに対する Entity Framework (EF) クエリは、デフォルトのタイムアウト (通常は 30 秒) を超える場合があります。 接続文字列の CommandTimeout
を調整した後でも、問題が発生する可能性があります。これは多くの場合、EF がタイムアウトを処理する方法についての誤解が原因です。
接続文字列設定の落とし穴
多くの開発者は、接続文字列内で Default Command Timeout
を設定すると、EF のタイムアウト動作に直接影響すると誤解しています。 ただし、これは効果がなく、既知の制限です (バグ ID 56806: https://www.php.cn/link/91a448039265fc4a83f545a4945e37a3 を参照)。
解決策: 直接タイムアウト制御
正しいアプローチは、EF コンテキスト レベルでタイムアウトを明示的に管理することです。これにより、タイムアウト設定がクエリに適用されることが保証されます。 実装は、EF バージョンに応じて若干異なります。
Entity Framework Core 1.0 以降:
<code class="language-csharp">this.context.Database.SetCommandTimeout(180);</code>
エンティティ フレームワーク 6:
<code class="language-csharp">this.context.Database.CommandTimeout = 180;</code>
エンティティ フレームワーク 5:
<code class="language-csharp">((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;</code>
Entity Framework 4 以前:
<code class="language-csharp">this.context.CommandTimeout = 180;</code>
を 180 秒などの値 (またはクエリにとってより適切な期間) に設定すると、データベース操作に許可される実行時間を直接制御し、大量のデータセットであってもタイムアウトを効果的に防止できます。 特定のニーズに基づいてこの値を忘れずに調整してください。CommandTimeout
以上が大規模なデータセットであっても、Entity Framework のタイムアウトを効果的に解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。