Heim > Backend-Entwicklung > C++ > Warum sind EF -Kernbeziehungen null, bis sie explizit geladen sind?

Warum sind EF -Kernbeziehungen null, bis sie explizit geladen sind?

Patricia Arquette
Freigeben: 2025-01-24 22:19:08
Original
525 Leute haben es durchsucht

Why are EF Core Relationships Null Until Explicitly Loaded?

EF -Kernverzögerung wird das Beziehungsattribut auf leeres

leeren <:> Frage:

Bei der Erfassung von Entitäten, die zugehörige Daten enthalten, wird EF Core zunächst in leere Beziehungen zurückgegeben, bevor explizite Belastungen ausgeführt werden.

Szene:

Betrachten Sie die folgende physische Klasse:

Die Beziehung ist in der Methode konfiguriert:

<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>
Nach dem Login kopieren
<:> Frage:

OnModelCreating

Anfangs waren die
<code class="language-csharp">modelBuilder.Entity<Mutant>()
    .HasOne(m => m.OriginalCode)
    .WithMany(oc => oc.Mutants)
    .HasForeignKey(m => m.OriginalCodeId);</code>
Nach dem Login kopieren
-attribute der verzögerbaren mutierten Einheiten null. Durch den Zugriff auf die

-Kollektion in einer separaten Abfrage wird das Attribut gefüllt.

Erläuterung:

OriginalCode OriginalCodes EF Core unterstützt standardmäßig keine Verzögerung des Ladens. Die Beziehungen werden nicht eifrig geladen, es sei denn, eine klare Anfrage. In der ersten Szene, da die -Be Beziehung nicht explizit in die Abfrage enthalten ist, bleibt sie null. OriginalCode

Lösung:

Es gibt zwei Möglichkeiten, dieses Verhalten zu lösen:

<.> 1. Eifrig laden: OriginalCode

Verwenden Sie In der Abfrage enthält es relevante Daten:

<.> 2. Verwenden Sie die Verzögerung des Ladens:

Ab EF Core 2.1 unterstützt es die Verzögerungsbelastung. Dies erfordert jedoch aktiviert und verwendet virtuelle Navigationsattribute.

Automatische Füllung verhindern:

Include()

Wenn Sie die Beziehung nicht füllen müssen, können Sie sie mit einer neuen DBContext -Instanz oder
<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
Nach dem Login kopieren
verwenden, ohne Anfragen für jede Abfrage zu verfolgen.

Das obige ist der detaillierte Inhalt vonWarum sind EF -Kernbeziehungen null, bis sie explizit geladen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage