wake-up-neo.com

So fügen Sie das untergeordnete Objekt eines untergeordneten Objekts in Entity Framework 5 ein

Ich benutze Entity Framework 5 code first und ASP.NET MVC 3.

Ich habe Mühe, das untergeordnete Objekt eines untergeordneten Objekts aufzufüllen. Unten sind meine Klassen ..

Anwendungsklasse;

public class Application
{
     // Partial list of properties

     public virtual ICollection<Child> Children { get; set; }
}

Kinderklasse:

public class Child
{
     // Partial list of properties

     public int ChildRelationshipTypeId { get; set; }

     public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}

ChildRelationshipType-Klasse:

public class ChildRelationshipType
{
     public int Id { get; set; }

     public string Name { get; set; }
}

Teil der GetAll-Methode im Repository, um alle Anwendungen zurückzugeben:

return DatabaseContext.Applications
     .Include("Children");

Die Child-Klasse enthält einen Verweis auf die ChildRelationshipType-Klasse. Um mit den Kindern einer Anwendung zu arbeiten, hätte ich ungefähr Folgendes:

foreach (Child child in application.Children)
{
     string childName = child.ChildRelationshipType.Name;
}

Ich erhalte hier eine Fehlermeldung, dass der Objektkontext bereits geschlossen ist.

Wie kann ich festlegen, dass jedes untergeordnete Objekt das ChildRelationshipType -Objekt enthalten muss, wie oben beschrieben?

115
Brendan Vogt

Wenn Sie die Bibliothek System.Data.Entity Einbinden, können Sie eine Überladung der Include() -Methode verwenden, die einen Lambda-Ausdruck anstelle eines Strings verwendet. Sie können dann Select() über Kinder mit Linq-Ausdrücken anstelle von string Pfaden ausführen.

return DatabaseContext.Applications
     .Include(a => a.Children.Select(c => c.ChildRelationshipType));
228
Ryan Amies

Mit EF Core in .NET Core können Sie das Schlüsselwort ThenInclude verwenden:

return DatabaseContext.Applications
 .Include(a => a.Children).ThenInclude(c => c.ChildRelationshipType);

Untergeordnete Elemente aus der Kindersammlung einschließen:

return DatabaseContext.Applications
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType1)
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType2);
57
Hayha

Am Ende habe ich Folgendes getan und es funktioniert:

return DatabaseContext.Applications
     .Include("Children.ChildRelationshipType");
20
Brendan Vogt

Ein gutes Beispiel für die Verwendung des Musters für das generische Repository und die Implementierung einer generischen Lösung dafür könnte in etwa so aussehen.

public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties)

{

    foreach (var include in includeProperties)
     {

        query = query.Include(include);
     }

        return query.ToList();
}
3
gcoleman0828