2016-10-21 3 views
3

dieses Aggregat Wurzel Consider ...EF Core-Include auf mehreren Sub-Level-Sammlungen

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

..., die ich wie so verwendet haben ...

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

Wie kann ich eifrig Last alle Kollektionen mit dem Kontakt?

Ich habe versucht, diese ...

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

ich das auch versucht haben ...

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

Auf einer etwas verwandten beachten, ist es möglich, zu sagen, was als zurückgegeben werden soll Teil einer aggregierten Wurzel mit fließender Konfiguration?

+0

@Igor, habe ich schon die SO Post gesehen, und versucht, die Vorschläge auf der MSDN-Artikel ... nichts funktioniert Ich habe Angst. – series0ne

+0

Die Fähigkeit zum Definieren von Aggregatwurzeln wird nach Problem [# 1985] (https://github.com/aspnet/EntityFramework/issues/1985) verfolgt. – bricelam

Antwort

6

Das ThenInclude Muster ermöglicht es Ihnen, einen Pfad von der Wurzel zu einem einzelnen Blatt zu spezifizieren, also um einen Pfad zu einem anderen Blatt angeben, müssen Sie mithilfe der Include Methode den Prozess von der Wurzel starten und wiederhole das für jedes Blatt.

Für Ihre Probe würde es so aussehen:

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 
    ...