2017-06-01 13 views
0

Entity Frameworkで初めて遊んでいます。 Requestテーブルと1対1の関係を有するようResultsテーブルとしてRequestオブジェクトに関連するいくつかのエンティティがありますEntity Frameworkですべての関連エンティティを返します

public List<Request> GetResult(string code) 
{ 
    List<Request> requests = new List<Request>(); 

    using (var db = new Context()) 
    { 
     requests = (from c in db.Requests where c.Code == code select c).ToList(); 
    } 

    return requests; 
} 

:私は単に次のクエリを書いています。しかし彼らはすべて戻ってくるnullです。

エンティティフレームワークでクエリを実行し、エンティティとそのすべての関連エンティティを返すにはどうすればよいですか?

TIA

+0

使用しているエンティティフレームワークのバージョンは何ですか?そして 'Request'オブジェクトを投稿できますか? – Steve

+0

https://stackoverflow.com/questions/14512285/entity-framework-is-there-a-way-to-automatically-eager-load-child-entities-wit – spender

答えて

2

に単一のクエリを設定します

db.Requests.Where(req => req.Code == code) 
    .Include(req => req.Results) // Joining is performed here 
    .Include(req => req.SomeOtherProperty) 
    .ToList() 
遅延ロードが有効になっている

// Hits the database once. 
var requests = db.Requests.Where(req => req.Code == code).ToList(); 
var requestIDs = requests.Select(req => req.ID); 
// Hits the database another time to load your Results property. 
db.Results.Where(res => requestIDs.Contains(res.RequestID)).Load(); 

場合は、明示的なロードを使用しての

複数のクエリは、毎回あなたがRequestリストのResultsプロパティにアクセスし、クエリはNにつながる可能性があなたのためにそれをロードするためのデータベース、上に実行されます+1の問題。しかし、EntityFramework Coreではレイジーローディングはまだ利用できません。

+0

System.Data.Entity名前空間を追加した後、熱心な読み込み例がうまくやってくれました。どうも! – Nugs

0

あなたがあなたのDataContextのコンストラクタに自動的にすべてをロードしたい場合は、使用

db.Entry(Requests).Reference(p => p.Code).Load(); 

をロードするオブジェクトを選択したい場合には、熱心なロードを使用して

this.Configuration.LazyLoadingEnabled = true; 
+0

'LazyLoadingEnabled'は、リクエストに対する新しいクエリを発行しますアンロードされた仮想プロパティ。 OPによってリクエストされたように、これらのプロパティは自動的にロードされません。 – spender

関連する問題