Memuatkan data berkaitan dengan penapisan dalam rangka entiti
Artikel ini menangani cabaran entiti berkaitan dengan bersemangat semasa memohon syarat penapisan dalam rangka entiti. Pendekatan yang optimum bergantung pada versi EF anda.
Rangka Kerja Entiti 6 Penyelesaian
EF6 bergantung pada pemuatan dan hubungan yang bersemangat. Walau bagaimanapun, mekanisme pembaikan ini tidak selalu berfungsi dengan betul dengan banyak hubungan. Penyelesaian melibatkan:
Melumpuhkan pemuatan malas: Mencegah pemuatan malas untuk memastikan semua data diambil dalam satu pertanyaan:
Context.Configuration.LazyLoadingEnabled = false;
unjuran dengan penapisan: Gunakan unjuran untuk menapis entiti yang berkaitan semasa pertanyaan:
var buses = Context.Busses .Where(b => b.IsDriving) .Select(x => new { b, Passengers = x.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();
Fixup Hubungan Automatik: EF secara automatik akan mengisi harta setiap objek Passengers
dengan hanya penumpang yang terjaga. Bus
Objek Pemindahan Data (DTOS): Gunakan alat pemetaan seperti automapper untuk menukar data yang diambil ke DTOS untuk pemindahan data optimum.
Rangka Kerja Entiti (5.0 dan kemudian) Penyelesaian
EF CORE 5.0 dan kemudian versi sokongan langsung bersarang termasuk di mana klausa, memudahkan proses:
var buses = Context.Busses .Include(bus => bus.Passengers.Where(p => p.Awake)) .ToList();
Pendekatan alternatif: Perpustakaan pihak ketiga
Perpustakaan seperti menawarkan kaedah yang lebih efisien untuk menguruskan penapis global yang terpakai untuk memasukkan koleksi. Ini dapat meningkatkan kebolehbacaan dan kebolehkerjaan kod untuk senario kompleks. EntityFramework.DynamicFilters
Ringkasan
Pendekatan terbaik untuk memuatkan data berkaitan dengan penapisan dalam rangka kerja entiti pada versi yang digunakan. EF CORE 5.0 menawarkan penyelesaian mudah. Bagi EF6, penyelesaian yang melibatkan melumpuhkan pemuatan malas dan menggunakan unjuran diperlukan. Perpustakaan pihak ketiga menyediakan alternatif untuk organisasi dan fleksibiliti kod yang lebih baik.Atas ialah kandungan terperinci Bagaimana untuk memuatkan entiti berkaitan dengan klausa di mana dalam kerangka entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!