2016-05-17 5 views
0

Ich habe ein Problem festgestellt: Ich habe eine Tabelle, die einen Verweis auf eine andere Tabelle, die eine Liste der Verweise auf eine andere Tabelle, die eine andere Liste von Referenzen und I hat will das alles eifrig laden.Entity Framework Eager Laden Entität Liste in Entitätsliste

Grundsätzlich ist die Idee:

public class User { 
    public ClassL1 l1 { get; set; } 
} 

ClassL1 { 
    public List<ClassL2> l2 { get; set; } 
} 

ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
} 

ClassL3 { 
    //some basic string or int values 
} 

Und zur Zeit, ich versuche es mit so etwas zu laden, aber ohne Erfolg:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2List => l2List.Select(l2Single => l2Single.l3))//This doesn't work 
    //.Include(u => u.l1.l2.Select(l2Single => l2Single.l3)) //Neither does this 
    .First(); 

Wie ich laden bin soll eine Liste von Listen, wenn die Auswahl nicht funktioniert? Jede Hilfe wäre willkommen.

EDIT: Nun, da es anscheinend ein offener Bug auf das ist, ich mit einem dummen fix ging, und machte es wie folgt funktionieren:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .First(); 
for (int i = 0; i < user.l1.l2.Count; i++) 
{ 
    user.l1.l2[i].l3 = context.l3DB 
    .Where(p => p.l2.Id == user.l1.l2[i].Id) 
    .ToList(); 
} 

Und für diese zu arbeiten, habe ich Verweise auf (zu den Eltern) in den Klassen. zum Beispiel:

public class ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
    public ClassL1 l1 { get; set; }//reference to parent 
} 

Antwort

1

Wie wäre es damit:

user = (from usr in context.Users 
     where usr.UserName == model.Username 
     select new 
     { 
      usr, 
      usr.l1, 
      l2List = from l2 in usr.l1.l2 
        select new 
        { 
         l2, 
         l2.l3 
        } 
     }).AsEnumerable().Select(m => m.usr).First(); 
+0

Scheint nicht zu funktionieren. Ich erhalte einen Fehler: "Kein Zwangsoperator ist zwischen Typen 'Microsoft.Data.Entity.Query.Internal.EntityQueryable'1 [ClassL3]' und 'System.Collections.Generic.List'1 [ClassL3]' definiert." –

+0

Vielleicht ist dies ein Problem mit Ihren Zuordnungen. Welche Version von EF verwenden Sie? –

+0

"EntityFramework.Commands": "7.0.0-rc1-final" "EntityFramework.Core": "7.0.0-rc1-final" Ich dachte es auch, aber ich kann keinen Weg finden, es zu beheben , hatte eine Prop namens das gleiche wie es ist Klassenname, änderte das, aber der Fehler blieb. Ich könnte die Code-Schnipsel zu diesem Problem hochladen, wenn das hilfreich wäre. –

0

prüfen dieses:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2 => l2.l3) 
    .First(); 
+0

Dies funktioniert nicht, l2 ist eine Liste, kann ich nicht Eigenschaften dort zugreifen, da Es ist kein einzelnes Element. Dort ist mein Problem, wenn es so einfach funktioniert, hätte ich kein Problem, aber im Moment muss ich zuerst wählen. –