Використання збережених процедур є одним із способів і широко застосовується протягом багатьох років.
Більш сучасний спосіб взаємодії з базами даних SQL Server з C # (або будь-якої мови .NET) - це використання Entity Framework. Перевага Entity Framework полягає в тому, що він забезпечує більш високий рівень абстракції.
Цитувати від Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
Система ADO.NET Entity Framework дозволяє розробникам створювати програми доступу до даних, програмуючи їх на концептуальній моделі програми, а не програмуючи безпосередньо на реляційній схемі зберігання даних. Мета - зменшити кількість коду та обслуговування, необхідне для програм, орієнтованих на дані. Програми Entity Framework надають такі переваги:
- Програми можуть працювати в контексті концептуальної моделі, орієнтованої на додатки, включаючи типи з успадкуванням, складними членами та відносинами.
- Програми звільняються від твердо кодованих залежностей певного механізму передачі даних або схеми зберігання.
- Відображення між концептуальною моделлю та специфічною для зберігання схемою може змінюватися без зміни коду програми.
- Розробники можуть працювати з послідовною моделлю об'єктної програми, яку можна відобразити на різних схемах зберігання, можливо, реалізованих у різних системах управління базами даних.
- Кілька концептуальних моделей можуть бути відображені в одній схемі зберігання.
- Підтримка мовних інтегрованих запитів (LINQ) забезпечує перевірку синтаксису часу компіляції для запитів проти концептуальної моделі.
Використання ORM проти збережених процедур передбачає компроміси, особливо з точки зору безпеки та тих, де існує логіка.
"Класичний" підхід до розробки за допомогою SQL Server полягає в тому, щоб логіка програми знаходилася в збережених процедурах і програмах, що мають лише права безпеки на виконання збережених процедур, а не на оновлення таблиць безпосередньо. Концепція тут полягає в тому, що збережені процедури - це рівень бізнес-логіки для додатків. Незважаючи на те, що теорія є надійною, вона, як правило, не виходить з різних причин, замінюючись реалізацією бізнес-логіки мовою програмування на зразок C # або VB. Хороші програми все ще реалізуються з багаторівневим підходом, включаючи розділення проблем тощо, але, швидше за все, вони дотримуються такої моделі, як MVC.
Одним із недоліків реалізації логіки в ORM, а не в базі даних, є простота налагодження та тестування правил цілісності даних особами, відповідальними за базу даних (DA або DBA). Візьмемо класичний приклад переказу грошей зі свого чеку на ощадний рахунок, важливо, щоб це було зроблено як атомна одиниця роботи, інакше кажучи, промазана транзакцією. Якщо такий вид передачі дозволено здійснювати лише через збережену процедуру, то DA та аудиторам QA відносно легко зберігається збережена процедура.
Якщо, з іншого боку, це робиться за допомогою ORM типу Entity Framework, і в процесі виробництва виявляється, що в рідкісних випадках гроші беруться за перевірку, але не вкладаються в налагодження заощаджень, можуть бути набагато складнішими, особливо якщо потенційно задіяно кілька програм. Це, швидше за все, це кращий випадок, можливо, пов'язаний з особливими апаратними проблемами, які повинні виникати у певній послідовності тощо. Як проводиться тест на це?