Używam PetaPoco micro-ORM. Praca z bazami danych za pomocą narzędzi ORM jest naprawdę bardzo łatwa i bezpieczna, ale nienawidzę tylko dodatkowego kodu. Zwykle umieszczałem większość kodu w samej bazie danych i korzystałem ze wszystkich funkcji RDBMS, takich jak Procedury składowane, Wyzwalacze itp., Które zostały zbudowane w celu lepszej obsługi.
Chcę wiedzieć, kiedy nie używać ORM zamiast przechowywanych procedur / wyzwalaczy i odwrotnie.
Odpowiedzi:
ORM (mapowanie obiektowo-relacyjne) nie wyklucza się wzajemnie z procedurami przechowywanymi. Większość ORM może wykorzystywać procedury składowane. Większość ORM generuje Procedury przechowywane, jeśli tak zdecydujesz. Więc problemem nie jest albo.
ORM mogą generować niedopuszczalny SQL (pod względem wydajności), a czasem możesz chcieć zastąpić ten SQL ręcznie spreparowanym SQL. Jednym ze sposobów osiągnięcia tego jest użycie SP (procedur przechowywanych).
W DotNet nie używaj procedur przechowywanych, jeśli:
Jeśli nie znasz procedur przechowywanych (nie swojej sprawy, ale uwzględniono ją dla kompletności).
Jeśli nie chcesz wprowadzać warstwy złożoności i dostosowywania do swojego projektu.
Tworzysz aplikację, która powinna współpracować z różnymi bazami danych lub która musiałaby zostać zreplikowana na kilku serwerach baz danych (to ostatnie ograniczenie może dotyczyć tylko niektórych baz danych).
Pamiętaj, że wyzwalaczy nie należy porównywać z ORM. Wyzwalacze wykonują funkcje, których lepiej nie ma w kodzie aplikacji (takie jak rejestrowanie lub synchronizowanie danych między bazami danych).
Niektóre osoby wolą używać procedur przechowywanych zamiast kodu SQL z różnych powodów, takich jak bezpieczeństwo (na przykład, aby zapobiec wstrzykiwaniu SQL) i ze względu na deklarowaną szybkość. Jest to jednak nieco dyskusyjne i wymaga szczegółowej dyskusji.
Jeśli twój ORM nie może wygenerować Procedur Przechowywanych i musisz napisać duży system, musisz ważyć dodatkowe kodowanie ręczne na podstawie twojej sprawy.
źródło
ORM często zakładają, że baza danych istnieje, aby obsługiwać ORM. Ale zwykle baza danych istnieje po to, aby obsługiwać firmę, która może zawierać setki aplikacji napisanych w wielu językach.
Ale to tylko przypadek „ORM vs. Procedury składowane”, jeśli używasz ORM, który nie może wywołać procedury składowanej. W przeciwnym razie chodzi o decyzję, gdzie kodować logikę biznesową.
Gdziekolwiek kodujesz logikę biznesową, jej zadaniem jest upewnienie się, że baza danych zmienia się z jednego spójnego stanu na inny spójny stan, niezależnie od tego, która aplikacja wprowadza zmianę . Tak naprawdę masz tylko dwie praktyczne opcje - koduj raz w bazie danych lub koduj raz w „nieprzeniknionej” warstwie dostępu do danych.
Uważaj na interfejs wiersza poleceń dbms, jeśli używasz „nieprzeniknionego” DAL.
źródło
Proste zapytanie -> ORM
Złożone zapytanie -> Procedura składowana
źródło
Wyzwalacz powinien być używany jako niezmiennik zapisu lub składać się z podstawowych reguł biznesowych, IMHO.
Problemy z orms:
źródło
Nie zgadzać się. Zapytanie ORM jest prostsze tylko wtedy, gdy znasz ORM lepiej niż SQL. W wyniku ORM powstaje znacznie więcej kodu, znacznie trudniej w utrzymaniu IMO. Jedynymi osobami korzystającymi z ORM są akcjonariusze firmy sprzedającej ORM (np. Microsoft).
źródło