2012-04-18 31 views
0

私はEntity Framework 4.1を使用しており、1対多の関係を持っています。 遅延ロードされたICollection上のエンティティフレームワークと遅延実行

私は怠け者を照会

は、全体のレコードセットが返された関係の片側に ICollection<T>をロードし、それは私がリポジトリ IQueryableインターフェースから直接照会していたときのような実行を延期しません。

私は事前に

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

おかげで、

トムのようなクエリを行うことができますので、この使用繰延実行を作成する方法はあります。

答えて

0

これは、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(); 
関連する問題