18

関連するすべてのエンティティまたはエンティティのコレクションを1回の呼び出しで読み込もうとしています。 私のエンティティは次のようになります。ネストされたエンティティ/コレクションをEntity Frameworkでロードする

IAMのがやろうとして何
Class Person 
{ 
    public virtual long Id { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

Class Employee 
{ 
    public virtual long Id { get; set; } 
    public DateTime AppointmentDate { get; set; } 
    public virtual ICollection<EmployeeTitle> Titles { get; set; } 
    public virtual Person Person { get; set; } 
} 

Class EmployeeTitle 
{ 
    public virtual long Id { get; set; } 
    public virtual bool IsCurrent { get; set; } 
    public virtual Title Title { get; set; } 
} 
Class Title 
{ 
    public virtual long Id { get; set; } 
    public virtual string Code { get; set; } 
    public virtual string Description { get; set; } 
} 

は私がすべての従業員をロードするためのメソッドを呼び出した場合、結果は人、私ができているタイトル からのコードと説明を含むEmployeeTitlesのリストを含むべきです第3レベルに到達する、すなわちEmployeeとEmployeeTitleの人とリストを得る。 EmployeeTitleでタイトル情報を取得する方法はわかりません。 これを取得するために私のコードは次のとおりです。

Context.Employees.Include("Person").Include(e => e.Titles).ToList(); 

これを実現する方法についていくつかの光を当てるしてください。前もって感謝します。

答えて

40

あなたはこれを試すことができます。

Context.Employees 
    .Include(e => e.Person) 
    .Include(e => e.Titles.Select(t => t.Title)) 
    .ToList(); 

Selectは、オブジェクトグラフの次のレベルの収集および負荷のナビゲーションプロパティに適用することができます。

+0

完璧:)ありがとう。 – Amit

+8

重要:ラムダ式 '.Include(x => x.Titles.Select(x => x.Title))と'の両方に同じ変数を誤って使用しないでください。文字列 'これはデリゲート型ではありません。 –

+4

"using System.Data.Entity"が必要です。そうでない場合は、このオーバーロードが存在しないために表示されます。 –

3

これはgoogleでの検索の最初のページなので、これを投稿したかっただけです。

スラマの答えはいいです。ただし、実際にリストを使用する予定がない場合は、ToList()の代わりにLoad()を使用することをお勧めします。だからそれはだろう:

Context.Employees 
     .Include(e => e.Person) 
     .Include(e => e.Titles.Select(t => t.Title)) 
     .Load(); 
関連する問題