Menggunakan prosedur tersimpan adalah salah satu cara, dan telah digunakan secara luas selama bertahun-tahun.
Cara yang lebih modern untuk berinteraksi dengan database SQL Server dari C # (atau bahasa NET.) Adalah dengan menggunakan Entity Framework. Keuntungan dari Entity Framework adalah memberikan tingkat abstraksi yang lebih tinggi.
Mengutip dari Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
ADO.NET Entity Framework memungkinkan pengembang untuk membuat aplikasi akses data dengan pemrograman terhadap model aplikasi konseptual alih-alih pemrograman langsung terhadap skema penyimpanan relasional. Tujuannya adalah untuk mengurangi jumlah kode dan pemeliharaan yang diperlukan untuk aplikasi berorientasi data. Aplikasi Entity Framework memberikan manfaat berikut:
- Aplikasi dapat bekerja dalam hal model konseptual yang lebih berpusat pada aplikasi, termasuk tipe dengan pewarisan, anggota yang kompleks, dan hubungan.
- Aplikasi dibebaskan dari dependensi kode keras pada mesin data atau skema penyimpanan tertentu.
- Pemetaan antara model konseptual dan skema penyimpanan khusus dapat berubah tanpa mengubah kode aplikasi.
- Pengembang dapat bekerja dengan model objek aplikasi yang konsisten yang dapat dipetakan ke berbagai skema penyimpanan, mungkin diimplementasikan dalam sistem manajemen basis data yang berbeda.
- Beberapa model konseptual dapat dipetakan ke skema penyimpanan tunggal.
- Dukungan kueri terintegrasi bahasa (LINQ) menyediakan validasi waktu kompilasi sintaksis untuk kueri terhadap model konseptual.
Penggunaan ORM vs Stored Procedures melibatkan pengorbanan, khususnya dalam hal keamanan dan di mana logika berada.
Pendekatan "klasik" untuk pengembangan dengan SQL Server adalah memiliki logika aplikasi berada dalam prosedur tersimpan dan program hanya diberi hak keamanan untuk menjalankan prosedur tersimpan, bukan memperbarui tabel secara langsung. Konsepnya di sini adalah bahwa prosedur tersimpan adalah lapisan logika bisnis untuk aplikasi. Sementara teorinya sehat, ia cenderung tidak disukai karena berbagai alasan, digantikan dengan menerapkan logika bisnis dalam bahasa pemrograman seperti C # atau VB. Aplikasi yang baik masih diimplementasikan dengan pendekatan berjenjang, termasuk pemisahan masalah dll. Tetapi lebih cenderung mengikuti pola seperti MVC.
Salah satu kelemahan menerapkan logika dalam ORM daripada database adalah kemudahan debugging dan menguji aturan integritas data oleh mereka yang bertanggung jawab untuk database (DA atau DBA). Ambil contoh klasik mentransfer uang dari giro Anda ke rekening tabungan, penting bahwa ini dilakukan sebagai unit atom, dengan kata lain diapit dalam suatu transaksi. Jika transfer semacam ini hanya diperbolehkan dilakukan melalui prosedur tersimpan, relatif mudah bagi DA dan auditor untuk QA prosedur tersimpan.
Jika di sisi lain ini dilakukan melalui ORM seperti Entity Framework dan dalam produksi diketahui bahwa jarang terjadi uang diambil dari pengecekan tetapi tidak dimasukkan ke dalam debugging tabungan mungkin jauh lebih kompleks, terutama jika beberapa program berpotensi terlibat. Ini kemungkinan besar akan menjadi kasus tepi, mungkin melibatkan masalah perangkat keras khusus yang perlu terjadi dalam urutan tertentu dll. Bagaimana cara seseorang menguji ini?