Entity Framework タイムアウト 質問する

Entity Framework タイムアウト 質問する

完了までに 30 秒以上かかる関数のインポートを使用すると、Entity Framework (EF) でタイムアウトが発生します。次のことを試しましたが、この問題を解決できませんでした。

提案されたようにEDMXファイルを持つプロジェクトのApp.ConfigDefault Command Timeout=300000ファイルに接続文字列を追加しましたここ

接続文字列は次のようになります。

<add 
    name="MyEntityConnectionString" 
    connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
       res://*/MyEntities.msl;
       provider=System.Data.SqlClient;provider connection string=&quot;
       Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
       Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
       MultipleActiveResultSets=True;Default Command Timeout=300000;&quot;"
    providerName="System.Data.EntityClient" />

次のようにリポジトリで CommandTimeout を直接設定してみました。

private TrekEntities context = new TrekEntities();

public IEnumerable<TrekMatches> GetKirksFriends()
{
    this.context.CommandTimeout = 180;
    return this.context.GetKirksFriends();
}

EF がタイムアウトしないようにするには、他に何ができますか? これは、非常に大きなデータセットでのみ発生します。小さなデータセットではすべて正常に動作します。

私が受け取ったエラーの 1 つを以下に示します。

System.Data.EntityCommandExecutionException: コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。 ---> System.Data.SqlClient.SqlException: タイムアウトが経過しました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。


OK - これでうまくいきました。起こったことはおかしなことです。接続文字列に がありDefault Command Timeout=300000、CommandTimeout が 180 に設定されていましたDefault Command Timeout。接続文字列から を削除すると、うまくいきました。したがって、答えは、リポジトリのコンテキスト オブジェクトで CommandTimeout を次のように手動で設定することです。

this.context.CommandTimeout = 180;

どうやら、接続文字列でタイムアウト設定を設定しても効果はないようです。

ベストアンサー1

EF 接続文字列内でデフォルトのコマンド タイムアウトを指定すると、既知のバグが発生します。

参考文献

接続文字列から値を削除し、データ コンテキスト オブジェクト自体に設定します。これは、競合する値を接続文字列から削除すると機能します。

エンティティ フレームワーク コア 1.0:

this.context.Database.SetCommandTimeout(180);

エンティティフレームワーク6:

this.context.Database.CommandTimeout = 180;

エンティティフレームワーク5:

((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;

Entity Framework 4 以下:

this.context.CommandTimeout = 180;

おすすめ記事