<:> Soalan:
Dalam model Rangka Kerja Entiti (EF Core), atribut navigasi kembali ke nilai kosong sebelum mengakses entiti yang berkaitan secara langsung.
Model:
Soalan pertanyaan:
<code class="language-csharp">public class Mutant { ... public virtual OriginalCode OriginalCode { get; set; } } public class OriginalCode { ... public virtual ICollection<Mutant> Mutants { get; set; } }</code>
pengisian dinamik hubungan:
tetapi ketika menanyakan entiti asal yang berkaitan:
<code class="language-csharp">var mutants = db.Mutants.ToList(); mutants.ForEach(m => Console.WriteLine(m.OriginalCode == null)); // 输出:所有突变体均为True</code>
Atribut Navigasi Kod Asal mutan secara automatik akan mengisi:
Penjelasan:
<code class="language-csharp">var originalCodes = db.OriginalCodes.ToList();</code>
Mekanisme pra -muatan Core EF secara automatik akan mengisi atribut navigasi entiti yang berkaitan yang telah dimuatkan pada konteks. Dalam kes kedua, apabila mencari kod asal, mutan yang sepadan juga akan dimuatkan ke dalam konteks, jadi atribut navigasi mereka akan diisi.
<code class="language-csharp">mutants.ForEach(m => Console.WriteLine(m.OriginalCode == null)); // 输出:所有突变体均为False</code>
Untuk mengawal tingkah laku ini, kaedah pemuatan eksplisit harus digunakan, seperti pra -load:
atau, untuk mengelakkan pengisian automatik, gunakan contoh DBContext baru atau tiada pertanyaan penjejakan.
kemas kini:
Dalam EF Core v2.1, ia kini menyokong pemuatan kelewatan. Untuk membolehkannya, tandakan atribut navigasi sebagai maya, pasang microsoft.EntityFrameworkcore.Proxies, dan hubungi UseelazyloadingProxies.
Atas ialah kandungan terperinci Mengapa sifat navigasi teras EF Null sehingga akses terus ke entiti yang berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!