完了までに30秒以上かかる関数のインポートを使用すると、Entity Framework(EF)を使用してタイムアウトが発生します。私は以下を試しましたが、この問題を解決できませんでした:
ここで提案されているように、EDMXファイルを持つプロジェクトのApp.ConfigファイルのDefault Command Timeout=300000
接続文字列に追加しました。
これは私の接続文字列は次のようになります。
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
私のリポジトリでCommandTimeoutを次のように直接設定してみました:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
EFがタイムアウトしないようにするには、他に何ができますか?これは非常に大きなデータセットでのみ発生します。すべてが小さなデータセットで正常に動作します。
ここに私が得ているエラーの一つがあります:
System.Data.EntityCommandExecutionException:コマンド定義の実行中にエラーが発生しました。詳細については、内部の例外を参照してください。---> System.Data.SqlClient.SqlException:タイムアウトの期限が切れました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。
OK-私はこれを動作させました、そしてそれは起こったことはばかげています。接続文字列とDefault Command Timeout=300000
CommandTimeoutの両方を180に設定しDefault Command Timeout
ました。接続文字列からを削除すると、動作しました。したがって、答えは、次のようにコンテキストオブジェクトのリポジトリのCommandTimeoutを手動で設定することです。
this.context.CommandTimeout = 180;
どうやら接続文字列でタイムアウト設定を設定しても、影響はありません。
"
文字列のままにします。
NONCLUSTERED
、一部のテーブルにインデックスを追加する必要があることに気づき、タイムアウトの問題が解決しました。