EF Core: Éviter les exceptions de référence nulles avec des entités associées
L'accès directement à des entités associées dans l'entité Framework Core (EF Core) Les requêtes peuvent conduire à des erreurs NullReferenceException
si la relation n'est pas correctement chargée. Cela se produit souvent lorsque vous essayez d'accéder aux propriétés de navigation avant que EF Core n'ait récupéré les données connexes.
Par exemple, si une entité Mutant
a une propriété OriginalCode
de navigation, accéder à mutant.OriginalCode
peut retourner null
à moins que vous ayez explicitement chargé l'entité OriginalCode
connexe. EF Core, par défaut, n'effectue pas de chargement paresseux.
La solution: chargement avide
L'approche la plus simple est le chargement impatient. Cela précharge les données liées au cours de la requête initiale, empêchant les valeurs nulles. Dans notre exemple:
<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
Cela garantit que m.OriginalCode
est rempli pour chaque Mutant
dans la liste mutants
.
Contrôler le chargement des données
Parfois, vous voudrez peut-être éviter de charger automatiquement les entités liées, en particulier lorsque vous traitez avec de grands ensembles de données ou des problèmes de performance. Deux options sont disponibles:
DBContext séparé: Utilisez une instance séparée DbContext
uniquement pour la requête pour éviter les effets secondaires potentiels des autres parties de votre application.
pas de requêtes de suivi: Utiliser AsNoTracking()
pour empêcher EF Core de suivre les entités, améliorer les performances:
<code class="language-csharp">var mutants = db.Mutants.AsNoTracking().ToList();</code>
Chargement paresseux (EF Core 2.1 et ultérieurement)
EF Core 2.1 et les versions ultérieures prennent en charge le chargement paresseux. Pour l'activer:
virtual
. Microsoft.EntityFrameworkCore.Proxies
Nuget. UseLazyLoadingProxies()
lors de la configuration de votre DbContext
. EF Core propose également une approche de chargement paresseuse sans proxy; Consultez la documentation officielle pour plus de détails. N'oubliez pas que le chargement paresseux peut avoir un impact sur les performances, alors utilisez-le judicieusement.
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!