0

以下のプロファイラーによると、遅延読み込みが無効になっている場合でも、クエリが結果を返すのに時間がかかります。

ここに画像の説明を入力

これが私のクエリです:

ここに画像の説明を入力

これが私のリポジトリです。ここでは、1つのレコードのみを取得して、ばかげたことをしています。

ここに画像の説明を入力


質問:


  1. ユーザーが (作業単位/リポジトリ パターンを使用している間) 長く待つ必要がないように、たとえば 100 レコードを取得してできるだけ早く返す正しい手順を教えてください。

  2. 100 レコードの次のバッチをユーザーが使用できるように、この情報をグリッドにページ分割する方法を EF はどのように認識し、次のバッチなどを使用できるのでしょうか?

.Take(1) があるかどうかわかりません。プロファイラーが 73,722 行を返すのはなぜですか?

4

1 に答える 1

3

あなたdbSet.ToList()はLINQ-to-Entitiesクエリを実行させています(そして、「データベースからメモリにテーブル全体をロードしてください」と言っています)Take(1). これは、データベース クエリではなく、既に読み込まれた結果に適用されます。

順序を変更するだけです:

dbSet.Take(1).ToList()

これは、データベース内の 1 つの要素のみを照会します ( TOP 1SQL で使用)。Skipページングの次のレコードを取得するには、 ( と一緒に)を使用できますTake。次に例を示します。

public IEnumerable<T> GetPage(int pageNumber, int entitiesPerPage)
{
    return dbSet
        .Skip((pageNumber - 1) * entitiesPerPage)
        .Take(entitiesPerPage)
        .ToList();
}
于 2012-11-06T00:10:04.777 に答える