dengan cekap mengambil bas dan terjaga penumpang dalam rangka entiti
Artikel ini menangani cabaran untuk mendapatkan semula bas dan penumpang mereka menggunakan Rangka Kerja Entiti (EF) dengan cara yang cekap, meminimumkan panggilan pangkalan data. Penyelesaiannya berbeza sedikit bergantung pada versi EF anda.
versi teras ef sebelum 5:
Matikan pemuatan malas () untuk mengelakkan hits pangkalan data yang tidak perlu apabila mengakses entiti yang berkaitan.
Context.Configuration.LazyLoadingEnabled = false;
Gunakan pertanyaan unjuran untuk memilih hanya data yang diperlukan:
<code class="language-csharp">var buses = Context.Busses.Where(b => b.IsDriving) .Select(b => new { Bus = b, AwakePassengers = b.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.Bus) .ToList();</code>
Fixup Hubungan EF secara automatik akan menyambungkan yang dipilih ke bas masing -masing dalam ingatan.
AwakePassengers
Pertimbangan penting (pra-EF Core 5):
Melumpuhkan pemuatan malas memberi kesan kepada bahagian lain aplikasi anda. Pertimbangkan trade-off. banyak hubungan yang mungkin memerlukan tugasan penumpang manual selepas unjuran.
pertanyaan tunggal ini dengan cekap mengambil bas dan hanya penumpang mereka yang terjaga, menghapuskan keperluan untuk penyelesaian dalam versi terdahulu. Pemetaan langsung ke DTOS menggunakan automapper kemudian boleh digunakan.
Pendekatan yang lebih baik ini dalam EF Core 5 menyediakan kaedah yang lebih bersih dan lebih cekap untuk mendapatkan entiti yang berkaitan dengan penapisan, dengan ketara memudahkan proses. IncludeWith(...)
Atas ialah kandungan terperinci Bagaimanakah saya dapat mengambil bas dan penumpang mereka dengan cekap dalam rangka entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!