0

EF 4.1 を使用して、5 万の大きなデータ テーブルをクエリしようとしています。DbContext の比較的高いタイムアウトを次のように設定しました。

   public class YourContext : DbContext
{
  public YourContext()
    : base("YourConnectionString")
  {
    // Get the ObjectContext related to this DbContext
    var objectContext = (this as IObjectContextAdapter).ObjectContext;

    // Sets the command timeout for all the commands
    objectContext.CommandTimeout = 500;
  }
}

それでも十分ではないようですが、Take(10000) している間は機能します。ここでは、サーバー側のページングのオプションはありません。このタイムアウトの状況を解消する方法を知っておくとよいでしょう。

実装またはリポジトリのパターンが原因ですか、それとも EF は大きなデータを処理できませんか?

4

3 に答える 3

1

あなたはそこで悪い道をたどりました...

データベースからすべてのデータをロードするのは悪い習慣です。
サーバー側のページングを実装するか、パディングが必要ない場合は、オンデマンドの読み込み機能を実装することをお勧めします。

ユーザーはそのすべてのデータを表示すると思いますので、データベースから取得する必要はありません。

1 日あたりの時間数を増やすほうがよいのですが、それを適切に行う必要があります。

そして、実践が示すように、パフォーマンスについて顧客/クライアント/ユーザーから苦情があり、穴のことを適切に書き直す必要があります。

よく考えて、怠け者にならないでください ;)

于 2012-12-18T12:06:22.947 に答える
0

EF は大きなデータを処理できます。

ほとんどの「接続」が持っていることをすでに理解しているように、これは単なる構成です(ADO.netでもtimeOutを使用します)。デフォルトでは 30 秒に設定されており、変更することができます。

于 2012-12-18T12:06:58.173 に答える
0

現在のシナリオで EF が処理できる最大データを決定することは非常に困難です。遅延読み込みを選択することをお勧めしますが、問題を完全に解決することはできません。私があなたの場所にいた場合、あなたの場合はページネーションも実行できないため、キャッシュ機能を使用しようとしたでしょう。

これらは私の提案であり、解決策ではありません。

于 2012-12-18T12:09:46.373 に答える