Korzystanie z procedur przechowywanych jest jednym ze sposobów i jest szeroko stosowane od wielu lat.
Bardziej nowoczesnym sposobem interakcji z bazami danych SQL Server z C # (lub dowolnego języka .NET) jest użycie Entity Framework. Zaletą Entity Framework jest to, że zapewnia wyższy poziom abstrakcji.
Cytat z Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
ADO.NET Entity Framework umożliwia programistom tworzenie aplikacji dostępu do danych poprzez programowanie w oparciu o koncepcyjny model aplikacji zamiast programowania bezpośrednio w relacyjnym schemacie przechowywania. Celem jest zmniejszenie ilości kodu i konserwacji wymaganej dla aplikacji zorientowanych na dane. Aplikacje Entity Framework zapewniają następujące korzyści:
- Aplikacje mogą działać w oparciu o bardziej koncepcyjny model koncepcyjny, w tym typy z dziedziczeniem, złożone elementy i relacje.
- Aplikacje są wolne od zakodowanych na stałe zależności od konkretnego silnika danych lub schematu pamięci.
- Odwzorowania między modelem koncepcyjnym a schematem specyficznym dla pamięci masowej można zmieniać bez zmiany kodu aplikacji.
- Programiści mogą pracować ze spójnym modelem obiektowym aplikacji, który można odwzorować na różne schematy przechowywania, ewentualnie zaimplementowane w różnych systemach zarządzania bazami danych.
- Wiele modeli koncepcyjnych można zmapować na pojedynczy schemat pamięci.
- Obsługa zapytań zintegrowanych z językiem (LINQ) zapewnia sprawdzanie poprawności składni w czasie kompilacji dla zapytań w modelu koncepcyjnym.
Zastosowanie ORM kontra Procedury składowane wiąże się z kompromisami, szczególnie pod względem bezpieczeństwa i miejsca, w którym znajduje się logika.
„Klasyczne” podejście do programowania w SQL Server polega na tym, że logika aplikacji znajduje się w procedurach przechowywanych, a programy mają tylko uprawnienia bezpieczeństwa do wykonywania procedur przechowywanych, a nie bezpośrednio aktualizują tabele. Chodzi tutaj o to, że procedury przechowywane są warstwą logiki biznesowej dla aplikacji. Chociaż teoria jest słuszna, z różnych powodów zwykle popada w niełaskę, zastępując ją logiką biznesową w języku programowania, takim jak C # lub VB. Dobre aplikacje są nadal wdrażane przy użyciu wielopoziomowego podejścia, w tym rozdzielania problemów itp., Ale częściej są zgodne z wzorem takim jak MVC.
Wadą implementacji logiki w ORM zamiast w bazie danych jest łatwość debugowania i testowania reguł integralności danych przez osoby odpowiedzialne za bazę danych (DA lub DBA). Weźmy klasyczny przykład przelewu pieniędzy z czeku na konto oszczędnościowe, ważne jest, aby uczynić to jako atomową jednostkę pracy, innymi słowy umieszczoną w transakcji. Jeśli tego rodzaju przeniesienie jest dozwolone tylko poprzez procedurę przechowywaną, DA i audytorzy mogą stosunkowo łatwo ocenić jakość przechowywanej procedury.
Jeśli z drugiej strony odbywa się to za pomocą ORM, takiego jak Entity Framework, a podczas produkcji okazuje się, że w rzadkich przypadkach pieniądze są sprawdzane, ale nie wkładane w debugowanie oszczędności może być znacznie bardziej skomplikowane, szczególnie jeśli potencjalnie zaangażowanych jest wiele programów. Najprawdopodobniej byłby to przypadek skrajny, być może obejmujący szczególne problemy sprzętowe, które muszą wystąpić w określonej sekwencji itp. W jaki sposób można to sprawdzić?