Heim >Backend-Entwicklung >C++ >Warum sind EF Core-Navigationseigenschaften null, bis sie explizit geladen werden, und wie kann ich sie konsistent auffüllen?

Warum sind EF Core-Navigationseigenschaften null, bis sie explizit geladen werden, und wie kann ich sie konsistent auffüllen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-24 22:25:09724Durchsuche

Why are EF Core navigation properties null until explicitly loaded, and how can I consistently populate them?

ef Core verzögerte das Problem des leeren Wertes und die Lösung des Navigationattributs

Problembeschreibung

Betrachten Sie das folgende Modell:

<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>
Definieren Sie die Beziehung in der

-Methode von dbContext: OnModelCreating

<code class="language-csharp">modelBuilder.Entity<Mutant>()
    .HasOne(m => m.OriginalCode)
    .WithMany(oc => oc.Mutants)
    .HasForeignKey(m => m.OriginalCodeId)
    .OnDelete(DeleteBehavior.Restrict);</code>
Beim Abfragen von Mutante war das

-Treizattribut ursprünglich leer. Wenn Sie jedoch die Mutante überprüfen, bevor Sie die Mutante abfragen, wird das Attribut OriginalCode gefüllt. OriginalCode OriginalCode Analyse der Ursache

Die "ladenbezogenen Daten" des EF -Kerndokuments erläuterte dieses Verhalten:

Entity Framework Core unterstützt keine Verzögerungsbelastung. Normalerweise ist das Navigationsattribut leer, bevor Sie sie durch Vorladung oder explizit geladen haben.

enthält jedoch der Teil "Pre -load" Folgendes:

Tipps

Entity Framework Core repariert automatisch alle Navigationsattribute, die in der Kontextinstanz an andere Entitäten geladen wurden. Selbst wenn Sie keine explizite Daten mit Navigationsattributen enthalten, kann das Attribut noch gefüllt werden, wenn einige oder alle zugehörigen Entitäten geladen wurden.

Lösung

Lösen Sie das erste Problem (Navigationsattribute sind leer):

Die Methode zur Verwendung verfügbarer ladenbezogener Daten wie Vorladung:

Lösen Sie das zweite Problem (vorgeladen Die relevanten Entitäten verursachten, dass die Navigationsattribute ausgefüllt wurden):

Dieses Verhalten ist "gestaltet" und kann nicht kontrolliert werden. Um dies zu vermeiden:

<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
Verwenden Sie für jede Abfrage eine neue DBContext -Instanz.

Verwenden Sie ohne Verfolgung von Abfragen ().

EF Core v2.1 und ein Update mit höherer Version:
  • EF CORE V2.1 Support Delay Loading, ist jedoch standardmäßig nicht aktiviert. Um es zu aktivieren:
  • AsNoTracking() Alle Navigationsattribute als
  • markieren.

NUGET -Beutel installieren. Verwenden Sie Verspätungsladung aktivieren.

Mit den oben genannten Methoden können Sie die Navigationsattribute im EF -Kern effektiv verwalten, um Leerstandsprobleme zu vermeiden und die Vorhersagbarkeit des Codes zu verbessern.

    Das obige ist der detaillierte Inhalt vonWarum sind EF Core-Navigationseigenschaften null, bis sie explizit geladen werden, und wie kann ich sie konsistent auffüllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn