0

私は Entity Framework 4.1 を使用しており、1 対多の関係があります。

ICollection<T>リレーションシップの片側で遅延読み込みをクエリすると、レコードセット全体が返され、リポジトリIQueryableインターフェイスから直接クエリを実行するときのように実行が延期されません。

これを遅延実行にして、次のようなクエリを実行できるようにする方法はありますか

Model.Childs.Where(x => !x.Deleted.HasValue).Skip(10).Take(5);

前もって感謝します、

トム。

4

1 に答える 1

1

これがEFでの遅延読み込みの原則です。ナビゲーションプロパティはコードで定義されており、そのプロパティで定義されているLINQクエリはLINQ-to-Objectsであり、SQLに変換されません。遅延読み込みでは、常にコレクション全体が読み込まれます(熱心な読み込みも同様です)。リポジトリにクエリを実行すると、IQueryableにクエリを実行し、SQLに変換されるLINQ-to-Entitiesを使用します。

回避策として、明示的な読み込みを使用します。

dbContext.Entry(Model).Collection(m => m.Childs)
                      .Query()
                      .Where(c => !c.Deleted.HasValue)
                      .Skip(10)
                      .Take(5)
                      .Load();
于 2012-04-18T09:42:49.953 に答える