2016-10-21 21 views
3

は私熱心ロードするにはどうすればよい...私はそうのように使用しているEFコア

class Contact 
{ 
    ICollection<ContactAddress> Addresses { get; set; } 
    ICollection<ContactItem> Items { get; set; } 
    ICollection<ContactEvent> Events { get; set; } 
} 

... ...

class Person 
{ 
    Contact ContactDetails { get; set; } 
} 

をこの集約ルートを検討する複数のサブレベルのコレクションに含めます連絡先のコレクションはすべて?

私はこれを試してみました

...

Context 
    .Set<Person>() 
    .Include(o => o.ContactDetails) 
    .ThenInclude(o => o.Addresses) 
    .ThenInclude(????) 
    . ... 

私もこれを試してみた...多少の関連ノートで

Context 
    .Set<Business>() 
    .Include(o => o.ContactDetails.Addresses) 
    .Include(o => o.ContactDetails.Events) 
    .Include(o => o.ContactDetails.Items) 

は、として返されるべきものを表現することも可能です流暢な構成を使用している集約ルートの一部ですか?

+0

@Igor、私はすでにSOポストを見てきた、と私は怖い作業...何をMSDNの記事の提案を試していません。 – series0ne

+0

集約ルーツを定義する機能は、[#1985](https://github.com/aspnet/EntityFramework/issues/1985)の問題によって追跡されます。 – bricelam

答えて

6

ThenIncludeパターンを使用すると、単一リーフにルートからのパスを指定することができ、したがって、別の葉へのパスを指定するために、あなたはInclude方法を使用してルートから処理を再開する必要があるとそれを各葉について繰り返す。それはこのようになりますあなたのサンプルについて

Context.Set<Person>() 
    .Include(o => o.ContactDetails).ThenInclude(o => o.Addresses) // ContactDetails.Addresses 
    .Include(o => o.ContactDetails).ThenInclude(o => o.Items) // ContactDetails.Items 
    .Include(o => o.ContactDetails).ThenInclude(o => o.Events) // ContactDetails.Events 
    ...