長時間実行操作に対する Entity Framework のタイムアウトの問題と解決策
Entity Framework (EF) では、関数インポートなどの長時間実行操作により、デフォルトの 30 秒のしきい値を超えるタイムアウトが発生する場合があります。この問題を解決するには、正しい構成方法を理解する必要があります。
デフォルトのコマンドタイムアウトの問題を解決する
1 つの方法は、App.Config ファイル内の接続文字列を変更し、「Default Command Timeout=300000」を追加することです。ただし、例が示すように、この方法は機能しません。代わりに、CommandTimeout をリポジトリ クラスで直接設定する必要があります:
<code class="language-csharp">public IEnumerable<trekmatches> GetKirksFriends() { this.context.CommandTimeout = 180; return this.context.GetKirksFriends(); }</code>
これにより、関連する操作に対してタイムアウトが明確に設定されるようになります。
接続文字列のタイムアウト設定を上書きします
接続文字列でデフォルトのコマンド タイムアウトを指定すると、リポジトリで手動で設定した CommandTimeout と競合する可能性があることに注意することが重要です。この問題を回避するには、接続文字列からタイムアウト設定を削除します。
バグと Entity Framework のバージョン
接続文字列でのデフォルトのコマンド タイムアウトの指定には、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>
これらの設定を実装すると、長時間実行中の EF タイムアウトの問題を効果的に解決できます。
以上が長時間実行される操作の Entity Framework タイムアウトを効果的に解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。