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)); }
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 }
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(); }
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!