2016-08-04 3 views
0

私はこのPOCOクラスを持っています。 1ベーシス:Entity Frameworkは1:1参照関連テーブルに対してn + 1クエリを実行しますか?

class Related 
{ 
    public int id {get;set;} 
    public string name {get;set;} 
} 

エンティティは1に関連して、このクラスに関連

class MainEntity 
{ 
    public int id {get;set;} 
    public string name {get;set;} 
    public virtual Related myRelated {get;set;} 
} 

クエリーdb.MainEntity.ToList();は、遅延読み込みのためにDBにN + 1回のクエリを実行するか、1:1の参照関係になったら、1回のクエリだけを実行しますか?

+2

'db.MainEntity.ToList();'はすべての 'MainEntity'行のリストを取得するために**一つのクエリ**を実行します - それだけで'関連する 'ものはすべて*これらの '.Related'参照を参照し始めると* lazy-loadingは必要に応じてそれらの関連するエンティティを一つずつ読み込みます –

答えて

3

ToListを実行すると、1つのクエリですべてのMainEntityオブジェクトのリストを取得するだけです。関連するエンティティがリンクされている場合、それらはまったく読み込まれません。

次に、myMain.Relatedプロパティに移動すると、遅延読み込みがトリガーされ、関連する参照オブジェクトの値を読み込むためのクエリが作成されます。

ここで、参照内のすべてのデータを1つのクエリで直接ロードすることもできます。これを行うには、.Include拡張メソッドを使用できます。あなたの例では、それは次のようになります。また、あなたは怠惰/積極的なロードとそれがSQLの用語で意味を行うことができます方法の詳細に入るthis pageをチェックする必要があります

db.MainEntity.Include(m => m.Related).ToList()

関連する問題