Saya telah melihat banyak proyek yang memiliki repositori yang mengembalikan instance IQueryable
. Ini memungkinkan filter tambahan dan penyortiran dapat dilakukan IQueryable
oleh kode lain, yang diterjemahkan menjadi SQL yang berbeda yang dihasilkan. Saya ingin tahu dari mana pola ini berasal dan apakah itu ide yang bagus.
Kekhawatiran terbesar saya adalah bahwa sebuah IQueryable
janji untuk mencapai database beberapa waktu kemudian, ketika disebutkan. Ini berarti bahwa kesalahan akan terjadi di luar repositori. Ini bisa berarti pengecualian Entity Framework dilemparkan ke dalam lapisan aplikasi yang berbeda.
Saya juga mengalami masalah dengan Multiple Active Result Set (MARS) di masa lalu (terutama ketika menggunakan transaksi) dan pendekatan ini sepertinya akan menyebabkan hal ini terjadi lebih sering.
Saya selalu menelepon AsEnumerable
atau ToArray
di akhir setiap ekspresi LINQ saya untuk memastikan database terkena sebelum meninggalkan kode repositori.
Saya bertanya-tanya apakah pengembalian IQueryable
dapat berguna sebagai blok bangunan untuk lapisan data. Saya telah melihat beberapa kode yang sangat mewah dengan satu repositori memanggil repositori lain untuk membangun yang lebih besar lagi IQueryable
.
where
klausul untuk ditangguhkan IQueryable
, Anda hanya perlu mengirim bahwa data melalui kawat, tidak seluruh hasil set.