Rumah >pembangunan bahagian belakang >C++ >EF CORE: Bagaimana menangani hubungan null semasa mengakses entiti yang berkaitan?

EF CORE: Bagaimana menangani hubungan null semasa mengakses entiti yang berkaitan?

Barbara Streisand
Barbara Streisandasal
2025-01-24 22:26:10601semak imbas

EF Core: How to Handle Null Relations When Accessing Related Entities?

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:

  1. DbContext yang berasingan: Gunakan contoh DbContext yang berasingan semata-mata untuk pertanyaan untuk mengelakkan kemungkinan kesan sampingan daripada bahagian lain aplikasi anda.

  2. 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:

  • Sifat Maya: Isytihar semua sifat navigasi sebagai virtual.
  • Pakej Proksi: Pasang Microsoft.EntityFrameworkCore.Proxies pakej NuGet.
  • Dayakan Proksi: Panggil 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn