Maison > développement back-end > C++ > Comment puis-je charger efficacement des entités imbriquées dans Entity Framework Core 2.0.1 ?

Comment puis-je charger efficacement des entités imbriquées dans Entity Framework Core 2.0.1 ?

Mary-Kate Olsen
Libérer: 2024-12-26 05:13:10
original
315 Les gens l'ont consulté

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

Chargement hâtif des entités imbriquées dans Entity Framework Core 2.0.1

Dans Entity Framework Core 2.0.1, le chargement hâtif des entités imbriquées est pas une fonctionnalité intégrée. Cela devient problématique lors du chargement d'entités avec plusieurs niveaux de relations, ce qui entraîne des valeurs nulles pour les entités liées imbriquées les unes dans les autres.

Pour relever ce défi, une méthode d'extension personnalisée peut être utilisée :

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));
}
Copier après la connexion

Cette méthode permet un chargement rapide de plusieurs propriétés de navigation spécifiées sous forme de chaînes.

Une autre méthode d'extension personnalisée peut être utilisée pour générer des chemins à inclure en fonction du type d'entité. métadonnées :

public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue)
{
    // Implementation omitted for brevity
}
Copier après la connexion

Cette méthode prend un type d'entité et une profondeur maximale facultative et renvoie une liste de chemins d'inclusion.

En incorporant ces méthodes d'extension dans la méthode générique du référentiel :

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();
}
Copier après la connexion

Il est désormais possible de charger avec impatience des entités associées imbriquées dans Entity Framework Core 2.0.1. Cette approche fournit un mécanisme de chargement rapide plus complet, éliminant le besoin d'instructions Include et ThenInclude explicites.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal