Question:
Lors de l'obtention d'entités contenant des données associées, EF Core sera initialement renvoyé aux relations vides avant d'exécuter un chargement explicite.
Scène:
Considérez la classe physique suivante:
La relation est configurée dans la méthode :
<code class="language-csharp">public class Mutant { public long Id { get; set; } public long OriginalCodeId { get; set; } public virtual OriginalCode OriginalCode { get; set; } } public class OriginalCode { public long Id { get; set; } public virtual List<Mutant> Mutants { get; set; } }</code>
OnModelCreating
<code class="language-csharp">modelBuilder.Entity<Mutant>() .HasOne(m => m.OriginalCode) .WithMany(oc => oc.Mutants) .HasForeignKey(m => m.OriginalCodeId);</code>
dans une requête séparée remplira l'attribut .
Explication: OriginalCode
OriginalCodes
EF Core ne prend pas en charge le chargement de retard par défaut. Les relations ne seront pas chargées avec impatience à moins que la demande claire. Dans la première scène, parce que la relation n'est pas explicitement incluse dans la requête, elle reste nul. OriginalCode
Il existe deux façons de résoudre ce comportement:
<.> 1. Chargement avide: OriginalCode
Utiliser Dans la requête, il contient des données pertinentes:
<.> 2. Utilisez le chargement de retard:
À partir de EF Core 2.1, il prend en charge le chargement de retard. Cependant, cela nécessite activer et utilise des attributs de navigation virtuelle.
Empêcher le remplissage automatique: Include()
<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
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!