Jak oceniasz każdy z nich pod względem:
- Wydajność
- Szybkość rozwoju
- Czysty, intuicyjny, łatwy w utrzymaniu kod
- Elastyczność
- Ogólnie
Lubię mój SQL i dlatego zawsze byłem zagorzałym fanem ADO.NET i procedur przechowywanych, ale ostatnio bawiłem się Linq na SQL i byłem zdumiony tym, jak szybko spisałem moją warstwę DataAccess i postanowiłem wydać jakiś czas naprawdę rozumiem albo Linq do SQL albo EF ... albo żaden?
Chcę tylko sprawdzić, czy żadna z tych technologii nie ma wielkiej wady, która sprawiłaby, że mój czas badań byłby bezużyteczny. Np. Wydajność jest okropna, fajna dla prostych aplikacji, ale do tej pory może Cię zabrać.
Aktualizacja: Czy możesz skoncentrować się na EF VS L2S VS SP zamiast na ORM VS SP. Interesuje mnie głównie EF VS L2S. Chciałbym jednak porównać je również z zapisanymi procesami, ponieważ zwykły SQl jest czymś, o czym dużo wiem.
źródło
Odpowiedzi:
Po pierwsze, jeśli zaczynasz nowy projekt, przejdź do Entity Framework („EF”) - teraz generuje on znacznie lepszy SQL (bardziej niż Linq to SQL) i jest łatwiejszy w utrzymaniu i bardziej wydajny niż Linq to SQL („ L2S ”). Począwszy od wydania .NET 4.0, uważam Linq do SQL za przestarzałą technologię. MS był bardzo otwarty, aby nie kontynuować dalszego rozwoju L2S.
1) Wydajność
Trudno jest odpowiedzieć. W przypadku większości operacji z pojedynczą jednostką ( CRUD ) można znaleźć prawie równoważną wydajność we wszystkich trzech technologiach. Musisz wiedzieć, jak działają EF i Linq na SQL, aby w pełni wykorzystać je. W przypadku dużych operacji, takich jak kwerendy odpytywania, możesz chcieć, aby EF / L2S „skompilowała” kwerendę encji tak, aby struktura nie musiała stale regenerować SQL, lub możesz mieć problemy ze skalowalnością. (zobacz zmiany)
W przypadku aktualizacji zbiorczych, w których aktualizuje się ogromne ilości danych, nieprzetworzony kod SQL lub procedura przechowywana zawsze będą działać lepiej niż rozwiązanie ORM, ponieważ nie trzeba przekazywać danych łączem do ORM, aby wykonać aktualizacje.
2) Szybkość rozwoju
W większości scenariuszy EF wysadzi nagie SQL / przechowywane procy, jeśli chodzi o szybkość rozwoju. Projektant EF może aktualizować model z bazy danych w miarę jego zmian (na żądanie), aby nie napotkać problemów z synchronizacją między kodem obiektu a kodem bazy danych. Jedynym momentem, w którym nie rozważałbym użycia ORM, jest wykonywanie aplikacji typu raportowanie / pulpit nawigacyjny, w której nie przeprowadzasz żadnych aktualizacji, lub gdy tworzysz aplikację tylko w celu wykonania operacji konserwacji danych surowych w bazie danych.
3) Czysty / możliwy do utrzymania kod
Ręce w dół, EF bije SQL / sprocs. Ponieważ relacje są modelowane, sprzężenia w kodzie są stosunkowo rzadkie. W przypadku większości zapytań relacje między podmiotami są prawie oczywiste dla czytelnika. Nie ma nic gorszego niż konieczność przechodzenia od debugowania między poziomami lub przez wiele warstw SQL / środkowych, aby zrozumieć, co faktycznie dzieje się z Twoimi danymi. EF wprowadza model danych do kodu w bardzo wydajny sposób.
4) Elastyczność
Przechowywane procy i surowy SQL są bardziej „elastyczne”. Możesz wykorzystać sproki i SQL do generowania szybszych zapytań w przypadku nieparzystych przypadków, a także możesz wykorzystać natywną funkcjonalność DB łatwiej niż możesz to zrobić za pomocą ORM.
5) Ogólnie
Nie daj się wciągnąć w fałszywą dychotomię wyboru ORM vs korzystania z procedur przechowywanych. Możesz używać obu w tej samej aplikacji i prawdopodobnie powinieneś. Duże operacje masowe powinny odbywać się w procedurach przechowywanych lub SQL (które mogą być faktycznie wywoływane przez EF), a EF powinien być używany do operacji CRUD i większości potrzeb warstwy pośredniej. Być może wolisz użyć SQL do pisania raportów. Myślę, że morał tej historii jest taki sam, jak zawsze. Użyj odpowiedniego narzędzia do pracy. Ale w skrócie jest to, że EF jest obecnie bardzo dobry (od .NET 4.0). Poświęć trochę czasu na czytanie i zrozumienie go dogłębnie, a możesz z łatwością tworzyć niesamowite, wydajne aplikacje.
EDYCJA : EF 5 nieco upraszcza tę część dzięki automatycznie kompilowanym zapytaniom LINQ , ale w przypadku naprawdę dużych ilości rzeczy zdecydowanie musisz przetestować i przeanalizować to, co najlepiej pasuje do Ciebie w prawdziwym świecie.
źródło
Procedury składowane:
(+)
(-)
ORM:
(+)
(-)
Ogólny kompromis polega na dużej elastyczności i stracie czasu w porównaniu z ograniczeniem możliwości, ale robieniem tego bardzo szybko.
Nie ma ogólnej odpowiedzi na to pytanie. To kwestia świętych wojen. Zależy również od projektu i twoich potrzeb. Wybierz to, co działa najlepiej dla Ciebie.
źródło
As any abstraction can produce "high-level" developers having no idea how it works under the hood
twoje pytanie jest w zasadzie O / RM vs. ręczne pisanie SQL
Używasz ORM lub zwykłego SQL?
Spójrz na niektóre inne dostępne rozwiązania O / RM, L2S nie jest jedynym (NHibernate, ActiveRecord)
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
aby odpowiedzieć na konkretne pytania:
źródło
LINQ-to-SQL jest niezwykłą technologią, która jest bardzo prosta w użyciu i generuje bardzo dobre zapytania do zaplecza. LINQ-to-EF miał go zastąpić, ale w przeszłości był wyjątkowo niezręczny w użyciu i generował znacznie gorszy SQL. Nie znam obecnego stanu rzeczy, ale Microsoft obiecał migrację całej dobroci L2S do L2EF, więc może teraz jest już lepiej.
Osobiście mam namiętny niechęć narzędzi ORM (patrz moja diatrybę tutaj dla szczegółów), a więc nie widzę powodu, aby sprzyjać L2EF, ponieważ L2S daje mi wszystko czego spodziewać się konieczności z warstwy dostępu do danych. W rzeczywistości uważam nawet, że funkcje L2S, takie jak ręcznie wykonane odwzorowania i modelowanie dziedziczenia, dodają całkowicie niepotrzebnej złożoności. Ale to tylko ja. ;-)
źródło
Istnieje zupełnie nowe podejście, które możesz rozważyć, jeśli szukasz mocy i wydajności procedur przechowywanych oraz szybkiego rozwoju, jaki zapewniają narzędzia takie jak Entity Framework.
Wziąłem SQL + na jazdę próbną w małym projekcie i jest to naprawdę coś wyjątkowego. Zasadniczo dodajesz, co równa się komentarzom do swoich procedur SQL, a te komentarze dostarczają instrukcji do generatora kodu, który następnie buduje naprawdę ładną bibliotekę klas obiektowych na podstawie faktycznej procedury SQL. Coś w rodzaju podobnej struktury encji w odwrotnej kolejności.
Parametry wejściowe stają się częścią obiektu wejściowego, parametry wyjściowe i zestawy wyników stają się częścią obiektu wyjściowego, a składnik usługi udostępnia wywołania metod.
Jeśli chcesz korzystać z procedur przechowywanych, ale nadal chcesz szybkiego rozwoju, możesz rzucić okiem na te rzeczy.
źródło