Heim > Backend-Entwicklung > C++ > Wie kann ich verschachtelte Entitäten in Entity Framework Core 2.0.1 effizient laden?

Wie kann ich verschachtelte Entitäten in Entity Framework Core 2.0.1 effizient laden?

Mary-Kate Olsen
Freigeben: 2024-12-26 05:13:10
Original
281 Leute haben es durchsucht

How Can I Efficiently Eager Load Nested Entities in Entity Framework Core 2.0.1?

Eifriges Laden verschachtelter Entitäten in Entity Framework Core 2.0.1

In Entity Framework Core 2.0.1 erfolgt das eifrige Laden verschachtelter Entitäten keine eingebaute Funktion. Dies wird problematisch, wenn Entitäten mit mehreren Beziehungsebenen geladen werden, was zu Nullwerten für ineinander verschachtelte verwandte Entitäten führt.

Um dieser Herausforderung zu begegnen, kann eine benutzerdefinierte Erweiterungsmethode verwendet werden:

public static IQueryable<T> Include<T>(this IQueryable<T> source, IEnumerable<string> navigationPropertyPaths)
    where T : class
{
    return navigationPropertyPaths.Aggregate(source, (query, path) => query.Include(path));
}
Nach dem Login kopieren

Diese Methode ermöglicht das eifrige Laden mehrerer Navigationseigenschaften, die als Zeichenfolgen angegeben sind.

Eine weitere benutzerdefinierte Erweiterungsmethode kann verwendet werden, um Pfade für die Einbindung basierend auf den Entitätstypen zu generieren Metadaten:

public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue)
{
    // Implementation omitted for brevity
}
Nach dem Login kopieren

Diese Methode verwendet einen Entitätstyp und eine optionale maximale Tiefe und gibt eine Liste von Include-Pfaden zurück.

Durch Einbindung dieser Erweiterungsmethoden in die generische Repository-Methode:

public virtual async Task<IEnumerable<T>> GetAllAsync(Expression<Func<T, bool>> predicate = null)
{
    var query = Context.Set<T>()
        .Include(Context.GetIncludePaths(typeof(T));
    if (predicate != null)
        query = query.Where(predicate);
    return await query.ToListAsync();
}
Nach dem Login kopieren

Es ist jetzt möglich, verschachtelte verwandte Entitäten in Entity Framework Core 2.0.1 eifrig zu laden. Dieser Ansatz bietet einen umfassenderen Eager-Loading-Mechanismus und macht explizite Include- und ThenInclude-Anweisungen überflüssig.

Das obige ist der detaillierte Inhalt vonWie kann ich verschachtelte Entitäten in Entity Framework Core 2.0.1 effizient laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage