Mungkin masuk akal, untuk membalikkan pertanyaan dan menemukan usecases di mana hanya prosedur tersimpan dapat melakukan, apa yang ingin Anda capai. Mungkin benar-benar ada kasus penggunaan, di mana prosedur tersimpan menonjol.
Jika ada bedanya, saya menggunakan MSSQL dan Entity Framework.
Pengetahuan saya tentang EF terbatas, tetapi sejauh yang saya bisa lihat, EF ( hanya ) ORM seperti yang lainnya; dan untungnya mampu menggunakan SQL mentah .
Jika saya mengambil dua poin utama Anda:
Laporan rumit yang memerlukan waktu beberapa menit untuk dijalankan (ini adalah halaman di aplikasi web). Saya menemukan saya bisa menulis SQL yang jauh lebih efisien (hanya butuh beberapa detik untuk menjalankan) daripada apa yang disediakan LINQ.
LINQ / EF gagal, saat melakukan laporan. Dan seperti yang Anda perhatikan, SQL
jauh lebih cepat, daripada menggunakan ORM. Tetapi apakah ini mendukung prosedur tersimpan atau hanya menentang penggunaan ORM untuk semuanya?
Masalah Anda jelas dapat diselesaikan dengan SQL . Jika kueri itu disimpan dan versi yang dikontrol dalam basis kode Anda membuat - sesuai dengan contoh Anda - setidaknya tidak ada perbedaan .
Aplikasi web perlu membaca dan menulis ke beberapa tabel pada database terpisah yang berisi banyak informasi sensitif lainnya yang tidak relevan dengan aplikasi tersebut. Daripada memberikannya akses ke semuanya, saya menggunakan prosedur tersimpan yang hanya melakukan apa yang dibutuhkan, dan hanya mengembalikan informasi terbatas. Aplikasi web kemudian dapat diberikan akses ke prosedur tersimpan ini saja, tanpa akses ke tabel apa pun dll.
Hal yang sama di sini: string koneksi sederhana dan dan PEMBARUAN dan masalah Anda selesai. Masalah ini dapat diselesaikan bahkan dengan ORM :
cukup gunakan layanan web di depan DB lain dan kompartementalisasi / isolasi yang sama tercapai.
Jadi tidak ada yang bisa dilihat di sini.
Melihat beberapa poin yang dibuat orang lain:
Anda memiliki unit kerja yang kompleks, mungkin melibatkan banyak tabel, yang tidak dapat dibungkus dalam suatu transaksi dengan mudah menggunakan fitur EF.
Tetapi SQL
bisa melakukan itu. Tidak ada sihir yang terlibat di sini.
Basis data Anda tidak cocok dengan EF
Lagi: Gunakan EF saat yang tepat.
Anda perlu bekerja dengan data yang melintasi batas server dengan server tertaut
Saya tidak melihat, bagaimana prosedur yang tersimpan membantu. Jadi saya tidak bisa melihat keuntungan dari prosedur yang tersimpan; tapi mungkin seseorang menjelaskan hal itu.
Anda memiliki skenario pengambilan data yang sangat kompleks di mana "bare metal" SQL diperlukan untuk memastikan kinerja yang memadai
Lagi: "Batas EF ".
Aplikasi Anda tidak memiliki izin CRUD penuh di atas meja, tetapi aplikasi Anda dapat diizinkan berjalan di bawah konteks keamanan yang dipercayai oleh server Anda
Baik. Saya pergi dengan mungkin .
Sejauh ini hanya setengah poin yang mendukung prosedur yang tersimpan.
Mungkin ada pertimbangan kinerja, yang mendukung prosedur tersimpan.
1) Menyimpan kueri memiliki manfaat dari panggilan sederhana ke prosedur tersimpan yang merangkum kompleksitas. Karena perencana kueri mengetahui kueri, maka "lebih mudah" untuk mengoptimalkan. Tapi penghematannya adalah perencana kueri canggih saat ini _minimal.
Di atas semua itu, bahkan jika ada sedikit biaya menggunakan pertanyaan ad hoc , jika data Anda terstruktur dengan baik dan diindeks dengan hati-hati, database hanyalah hambatan dari aplikasi Anda. Jadi, bahkan jika ada delta kecil, itu dapat diabaikan mengingat faktor-faktor lain.
2) Namun demikian ia berpendapat untuk menyimpan pertanyaan kompleks dalam DB. Ada dua hal yang perlu dipertimbangkan:
a) kueri yang kompleks memanfaatkan infrastruktur DB secara masif, yang meningkatkan waktu asnwering untuk setiap kueri lainnya. Anda tidak dapat menjalankan banyak permintaan mahal secara paralel . Ini tidak berbicara pro atau kontra prosedur tersimpan, tetapi terhadap pertanyaan kompleks .
b) Jika kueri membutuhkan waktu, mengapa harus repot dengan kemenangan kecil dari prosedur tersimpan.
tl; dr
Tidak ada yang berbicara langsung terhadap prosedur tersimpan. Jadi menggunakan prosedur tersimpan tidak masalah - jika itu membuat Anda bahagia.
Tapi di sisi lain: Saya tidak bisa membayangkan yang tepat kasus penggunaan yang berbicara tegas pro.
Kapan saya harus menggunakan prosedur tersimpan?
Jawaban yang tepat adalah: Kapan pun Anda suka . Tetapi ada opsi lain.