2017-03-04 5 views
1

ich habe ein seltsames Verhalten in C# mit EF Es ist ein .NET-Core-Projekt mit EF-Core 1.1.0keine verschachtelten Ergebnisse in Entity Framework Core-

"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0", 
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", 

ich zwei Modelle erstellt haben, "User" und "Gruppe"

public class User 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
    public string lastName { get; set; } 

    public List<Group> Groups { get; set; } 
} 

public class Group 
{ 
    public int Id { get; set; } 
    public string groupName { get; set; } 
    public virtual User User { get; set; } 
} 

Das Ergebnis sollte mir einen Benutzer mit einer Liste seiner Gruppen geben.

nun das seltsame Teil:

Ergebnis kommt von DB zurück, ich sehe in Alluser, Gruppen sind Null

ich einen Blick in den Kontext nehmen die Gruppen

Gruppen zu sehen, gefüllt:

Groups are filled

Jetzt schaue ich wieder in Alluser Ergebnis und magisch die Gr oup wird in jedem Benutzerelement gefüllt.

Gruppen sind im Inneren Benutzer gefüllt:

Groups are filled inside User

Ich schätze wirklich jede Hilfe !!

Antwort

4

Sieht so aus, als ob Sie faul sind, die Entitäten zu laden.

Sie können sie eifrig laden, indem Sie .Include verwenden.

var allUsers = context.Users.Include(user => user.Groups).ToList(); 

Dieser Ansatz lädt die erste Entität (Benutzer) sowie die zugehörigen Entitäten als Teil der Abfrage (Gruppen).

+2

Es gibt kein Lazy-Laden mit Entity Framework Core. LazyLoadingEnabled ist beispielsweise nicht verfügbar. Mehr Infos: https://docs.microsoft.com/en-us/ef/core/querying/related-data (Lazy Loading ist mit EF Core noch nicht möglich.) – Ben

+0

Ja, es funktioniert mit dem .Include, danke Alles so sehr !! – KroKro

0

Es ist keine Magie, dass der DbContext keine Entitäten von der Datenbank herunterlädt, bis Sie das nicht tun. Wenn Sie im Debugging auf context.GroupsResults View geklickt haben, ruft der DbContext alle Gruppen aus der Datenbank ab, sodass er den Benutzern zugeordnet werden kann.

Ich glaube, Sie für die Methode suchen Fügen Sie, wo Sie die Benutzer mit den zugehörigen Gruppen in einer Abfrage wie folgt zu erreichen:

var allUsers = context.Users.Include(u => u.Groups).ToList(); 
0

Dieses Verhalten kommt von der Trägheit der Ladeeinheiten.

Standardmäßig müssen Sie jedes der Unterentitäten manuell laden. Es heißt Eil-Laden.

Um Ihre Entitäten eifrig zu laden, müssen Sie die Methode .Include() für jede Ihrer Navigationseigenschaften verwenden.

z.B. context.User.Include(x => x.Groups)

Die Include-Methode generiert eine neue SQL-Anweisung zum Abrufen Ihrer Gruppen aus der Datenbank.

Dann können Sie die ToList() Methode verwenden, um die Ausführung Ihrer Abfrage zu erzwingen.

Verwandte Themen