Saya mencoba melakukan banyak penelitian tetapi saya lebih seperti orang db - jadi bahkan penjelasan di MSDN tidak masuk akal bagi saya. Adakah yang bisa menjelaskan, dan memberikan beberapa contoh tentang Include()
pernyataan apa yang dilakukan dalam istilah SQL
kueri?
96
Jawaban:
Katakanlah misalnya Anda ingin mendapatkan daftar semua pelanggan Anda:
Dan mari kita asumsikan bahwa setiap
Customer
objek memiliki referensi ke himpunannyaOrders
, dan masing-masingOrder
memiliki referensiLineItems
yang juga dapat mereferensikan aProduct
.Seperti yang Anda lihat, memilih objek tingkat atas dengan banyak entitas terkait dapat menghasilkan kueri yang perlu menarik data dari banyak sumber. Sebagai ukuran kinerja,
Include()
memungkinkan Anda untuk menunjukkan entitas terkait mana yang harus dibaca dari database sebagai bagian dari kueri yang sama.Menggunakan contoh yang sama, ini mungkin membawa semua tajuk pesanan terkait, tetapi tidak ada catatan lain:
Sebagai poin terakhir sejak Anda meminta SQL, pernyataan pertama tanpa
Include()
dapat menghasilkan pernyataan sederhana:SELECT * FROM Customers;
Pernyataan terakhir yang memanggil
Include("Orders")
mungkin terlihat seperti ini:SELECT * FROM Customers JOIN Orders ON Customers.Id = Orders.CustomerId;
sumber
LineItems
danProducts
, kueri LINQ akan terlihat seperti inivar customersWithOrderDetail = context.Customers.Include("Orders").Include("LineItems").Include("Products").ToList();
:?Include()
untuk menangkap objek di sepanjang "jalur" yang berbeda. Jika Anda menginginkan objek di jalur yang sama, Anda hanya perlu melakukan satu panggilan yang menentukan seluruh jalur. KarenaLineItems
danProducts
tidak berbagi komponen jalur apa pun, Anda memerlukan panggilan terpisah.Saya hanya ingin menambahkan bahwa "Sertakan" adalah bagian dari eager loading. Ini dijelaskan dalam tutorial Entity Framework 6 oleh Microsoft. Ini tautannya: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the -entity-framework-in-an-asp-net-mvc-application
Kutipan dari halaman tertaut:
sumber
Anggap saja sebagai memaksakan Eager-Loading dalam skenario di mana Anda sub-item akan menjadi pemuatan lambat.
Query EF yang dikirim ke database akan menghasilkan hasil yang lebih besar pada awalnya, tetapi pada akses tidak ada permintaan tindak lanjut yang akan dibuat saat mengakses item yang disertakan.
Di sisi lain, tanpa itu, EF akan mengeksekusi query terpisah nanti, saat Anda mengakses sub-item pertama kali.
sumber