Maison > développement back-end > C++ > Pourquoi les propriétés de navigation principales d'EF sont-elles nulles jusqu'à l'accès direct aux entités associées ?

Pourquoi les propriétés de navigation principales d'EF sont-elles nulles jusqu'à l'accès direct aux entités associées ?

Mary-Kate Olsen
Libérer: 2025-01-24 22:16:10
original
650 Les gens l'ont consulté

Why Are EF Core Navigation Properties Null Until Direct Access to Related Entities?

EF Core Delay Charging Charging Navigation Attributs

Question:

Dans le modèle de noyau de framework Entity Framework (EF Core), l'attribut de navigation est retourné à la valeur vide avant d'accéder directement aux entités concernées.

Modèle:

Question de requête:

<code class="language-csharp">public class Mutant
{
    ...
    public virtual OriginalCode OriginalCode { get; set; }
}

public class OriginalCode
{
    ...
    public virtual ICollection<Mutant> Mutants { get; set; }
}</code>
Copier après la connexion
Lors de la récupération du mutant, l'attribut de navigation OriginalCode est vide:

Remplissage dynamique de la relation:

mais lors de l'interrogation en entités de code original liées:
<code class="language-csharp">var mutants = db.Mutants.ToList();
mutants.ForEach(m => Console.WriteLine(m.OriginalCode == null));
// 输出:所有突变体均为True</code>
Copier après la connexion

OriginalCode Navigation Les attributs des mutants se rempliront automatiquement:

Explication:

<code class="language-csharp">var originalCodes = db.OriginalCodes.ToList();</code>
Copier après la connexion

Le mécanisme de pré-chargement d'EF Core remplira automatiquement les attributs de navigation des entités pertinentes qui ont été chargées dans le contexte. Dans le deuxième cas, lors de la recherche de codes originaux, le mutant correspondant sera également chargé dans le contexte, de sorte que leurs attributs de navigation seront remplis.

<code class="language-csharp">mutants.ForEach(m => Console.WriteLine(m.OriginalCode == null));
// 输出:所有突变体均为False</code>
Copier après la connexion
Solution:

Pour contrôler ce comportement, la méthode de chargement explicite doit être utilisée, comme la pré-charge:

ou, pour éviter le remplissage automatique, utilisez une nouvelle instance DBContext ou pas de requête de suivi.

Mise à jour:

Dans EF Core V2.1, il prend désormais en charge le chargement de retard. Pour l'activer, marquez les attributs de navigation en tant que virtuel, installez Microsoft.entityFrameworkCore.proxies et appelez useElazyloadingProxies.

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!

source:php.cn
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