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
Patricia ArquetteOriginal
2025-01-24 22:19:08520Durchsuche

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>
<:> 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>
-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>
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!

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