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.