Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Entity Framework Core menggunakan Language Integrated Query (LINQ) untuk mengkueri data dari database. LINQ memungkinkan Anda menggunakan C# (atau bahasa pilihan .NET Anda) untuk menulis kueri yang bertipedata kuat berdasarkan konteks dan kelas entitas turunan Anda.
Nota
Artikel ini sudah kedaluarsa dan beberapa bagiannya perlu diperbarui untuk memperhitungkan perubahan yang terjadi dalam desain alur kueri. Jika Anda memiliki keraguan tentang perilaku apa pun yang disebutkan di sini, silakan ajukan pertanyaan.
Masa hidup kueri
Deskripsi berikut adalah gambaran umum tingkat tinggi dari proses yang dilalui setiap kueri.
- Kueri LINQ diproses oleh Entity Framework Core untuk membangun representasi yang siap diproses oleh penyedia database
- Hasilnya di-cache sehingga pemrosesan ini tidak perlu dilakukan setiap kali kueri dijalankan
- Hasilnya diteruskan ke penyedia database
- Penyedia database mengidentifikasi bagian kueri mana yang dapat dievaluasi dalam database
- Bagian kueri ini diterjemahkan ke bahasa kueri khusus database (misalnya, SQL untuk database relasional)
- Kueri dikirim ke database dan kumpulan hasil yang dikembalikan (hasilnya adalah nilai dari database, bukan instans entitas)
- Untuk setiap item dalam tataan hasil
- Jika kueri adalah kueri pelacakan, EF memeriksa apakah data mewakili entitas yang sudah ada di pelacak perubahan untuk instans konteks
- Jika demikian, entitas yang ada dikembalikan
- Jika tidak, entitas baru dibuat, pelacakan perubahan disiapkan, dan entitas baru dikembalikan
- Jika kueri adalah kueri tanpa pelacakan, entitas baru selalu dibuat dan dikembalikan
- Jika kueri adalah kueri pelacakan, EF memeriksa apakah data mewakili entitas yang sudah ada di pelacak perubahan untuk instans konteks
Saat kueri dijalankan
Saat memanggil operator LINQ, Anda hanya membangun representasi dalam memori kueri. Kueri hanya dikirim ke database saat hasilnya digunakan.
Operasi paling umum yang mengakibatkan kueri dikirim ke database adalah:
- Mengiterasi hasil dalam perulangan
for - Menggunakan operator seperti
ToList,ToArray,Single,Count, atau overload asinkron yang setara
Peringatan
Selalu validasi input pengguna: Meskipun EF Core melindungi dari serangan injeksi SQL dengan menggunakan parameter dan menghindari literal dalam kueri, EF Core tidak memvalidasi input. Validasi yang sesuai, sesuai persyaratan aplikasi, harus dilakukan sebelum nilai dari sumber yang tidak tepercaya digunakan dalam kueri LINQ, ditetapkan ke properti entitas, atau diteruskan ke API EF Core lainnya. Ini termasuk input pengguna apa pun yang digunakan untuk membangun kueri secara dinamis. Bahkan saat menggunakan LINQ, jika Anda menerima input pengguna untuk membangun ekspresi, Anda perlu memastikan bahwa hanya ekspresi yang dimaksudkan yang dapat dibangun.