Rumah >pembangunan bahagian belakang >C++ >EF CORE: Bagaimana menangani hubungan null semasa mengakses entiti yang berkaitan?
Teras EF: Mengelak Pengecualian Rujukan Batal dengan Entiti Berkaitan
Mengakses secara langsung entiti berkaitan dalam pertanyaan Teras Rangka Kerja Entiti (Teras EF) boleh membawa kepada ralat NullReferenceException
jika perhubungan tidak dimuatkan dengan betul. Ini selalunya berlaku apabila anda cuba mengakses sifat navigasi sebelum EF Core telah mendapatkan semula data yang berkaitan.
Contohnya, jika entiti Mutant
mempunyai OriginalCode
sifat navigasi, mengakses mutant.OriginalCode
mungkin mengembalikan null
melainkan anda telah memuatkan entiti OriginalCode
yang berkaitan secara eksplisit. EF Core, secara lalai, tidak melakukan pemuatan malas.
Penyelesaian: Bersemangat Memuat
Pendekatan yang paling mudah ialah pemuatan bersemangat. Ini pramuat data berkaitan semasa pertanyaan awal, menghalang nilai nol. Dalam contoh kami:
<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
Ini memastikan m.OriginalCode
diisi untuk setiap Mutant
dalam senarai mutants
.
Mengawal Pemuatan Data
Kadangkala, anda mungkin ingin mengelak daripada memuatkan entiti berkaitan secara automatik, terutamanya apabila berurusan dengan set data yang besar atau kebimbangan prestasi. Dua pilihan ada:
DbContext yang berasingan: Gunakan contoh DbContext
yang berasingan semata-mata untuk pertanyaan untuk mengelakkan kemungkinan kesan sampingan daripada bahagian lain aplikasi anda.
Tiada Pertanyaan Penjejakan: Gunakan AsNoTracking()
untuk menghalang EF Core daripada menjejak entiti, meningkatkan prestasi:
<code class="language-csharp">var mutants = db.Mutants.AsNoTracking().ToList();</code>
Lazy Loading (EF Core 2.1 dan lebih baru)
EF Core 2.1 dan versi yang lebih baru menyokong pemuatan malas. Untuk mendayakannya:
virtual
.Microsoft.EntityFrameworkCore.Proxies
pakej NuGet.UseLazyLoadingProxies()
semasa mengkonfigurasi DbContext
anda.EF Core juga menawarkan pendekatan pemuatan malas tanpa proksi; rujuk dokumentasi rasmi untuk butiran. Ingat bahawa pemuatan malas boleh menjejaskan prestasi, jadi gunakannya dengan bijak.
Atas ialah kandungan terperinci EF CORE: Bagaimana menangani hubungan null semasa mengakses entiti yang berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!