Jaka jest różnica między Entity Framework i LINQ to SQL by.NET 4.0?

Sprawdzałem II edycja profesjonalnego ASP.NET MVC i zrealizowane EF zastąpiły LINQ na SQL. LINQ do SQL znam od pierwszej książki, ale nic nie wiem o EF. W każdym razie podczas czytania kodu wydaje się, że nic się nie zmieniło poza nazwą. Te same stare klasy repozytoriów, te same stare funkcje.

Trochę poszperałem. Wiem, że LINQ nie ogranicza się do SQL. Również EF nie jest ograniczona Microsoft-rodzina serwerów SQL. W Tym 2-letnim pytaniu ludzie nie są zadowolony z EF, mówiąc, że to zbyt skomplikowane i w ogóle. Ale teraz czytam ten sam kod pod nazwą EF. Tylko klasy są generowane z ADO.NET Model Entity wprowadzony w LINQ do SQL. Czy ktoś może pozbyć się zamieszania związanego z funkcjami EF, skoro to już de facto standart ORM?

Author: Community, 2010-07-21

4 answers

Są nieco podobne i mogą być używane w bardzo podobny sposób, pod względem kodu, ale mają pewne istotne różnice. Zauważ, że "LINQ "to nie to samo co "LINQ to SQL"; EF używa również LINQ. Niektóre znaczące różnice to:

  • LINQ to SQL to w dużej mierze tylko SQL Server, nie tyle projektowo, co implementacyjnie. EF został zaprojektowany do obsługi i obsługuje wiele DBs, jeśli masz kompatybilny ADO.NET dostawca.
  • Po wyjęciu z pudełka, LINQ do SQL ma bardzo słabą historia zmian metadanych DB. Musisz zregenerować części swojego modelu od zera i tracisz dostosowania.
  • EF obsługuje funkcje modelu, takie jak relacje wiele do wielu i dziedziczenie. LINQ to SQL nie obsługuje ich bezpośrednio.
  • [[3]}W. NET 3.5, LINQ do SQL miał znacznie lepsze wsparcie dla funkcji specyficznych dla serwera SQL niż EF. W większości przypadków nie jest to prawdą w. Net 4; są one dość podobne pod tym względem.
  • EF pozwala wybrać Model First, DB First, lub Pierwsze modelowanie kodu. LINQ do SQL, po wyjęciu z pudełka, naprawdę obsługuje tylko DB.
 73
Author: Craig Stuntz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 21:43:46

EF doczekał się wersji v4. 0. Wcześniej było to trochę bolesne w użyciu i nie polecam tego. Teraz zalecam, aby wszystkie nowe kody LINQ-to - DB używały EF4.

Jeśli chodzi o nowe funkcje, część LINQ jest w rzeczywistości bardzo podobna do LINQ do SQL. Ale to zupełnie inna Architektura: EF4 działa jako dostawca LINQ do (EF) ADO.NET dostawca, który następnie owija inny ADO.NET dostawca. Są więc nowe rzeczy takie jak Entity SQL (którego nie używam), a EF obsługujący różne podstawy ADO.NET dostawców (z których korzystam).

System modelowania XML, którego używa EF, umożliwia bardziej wydajne abstrakcje mapowania , jak również. Jednym, który używam regularnie jest posiadanie różnych tabel z tymi samymi kluczami podstawowymi mapowanie do relacji dziedziczenia encji; z tego, co rozumiem, jedynym sposobem, aby to zrobić w LINQ do SQL jest za pomocą " kolumny selektora "(choć nigdy nie próbowałem tego w LINQ do SQL).

 17
Author: Stephen Cleary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 02:14:53

Różnica między LINQ do SQL i Entity Framework:

LINQ do SQL:

  • działa tylko z bazą danych SQL Server.
  • generuje a .dbml do utrzymania relacji
  • nie ma wsparcia dla typu złożonego.
  • nie może wygenerować bazy danych z modelu.
  • pozwala na mapowanie tylko jeden do jednego pomiędzy klasami encji a relacyjnymi tabelami / widokami.
  • pozwala na odpytywanie danych za pomocą DataContext.
  • zapewnia szczelną podejście sprzężone.
  • może być używany do szybkiego tworzenia aplikacji tylko z SQL Server.

Entity Framework

  • Może współpracować z różnymi bazami danych, takimi jak Oracle, DB2, MYSQL, SQL Server itp.

  • Generuje .pliki edmx początkowo. Relacja jest utrzymywana przy użyciu 3 różnych plików .csdl,msl i .ssdl

  • Ma wsparcie dla typu złożonego.

  • Może generować bazę danych z model.

  • Pozwala na mapowanie jeden do jednego, jeden do wielu i wiele do wielu między klasami encji a relacyjnymi tabelami /widokami

  • Pozwala na odpytywanie danych za pomocą EntitySQL, ObjectContext, DbContext.

  • Zapewnia luźno sprzężone podejście. Ponieważ jego pierwsze podejście do kodu pozwala na użycie wzorca iniekcji zależności, co czyni go luźno sprzężonym .

  • Może być używany do szybkiego tworzenia aplikacji z RDBMS, takich jak SQL Serwer, Oracle, DB2 i MySQL itp.

Więcej szczegółów

 13
Author: IndieTech Solutions,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 20:43:08

Najnowszy EF jest o wiele bardziej wytrzymały i nie jesteś zmuszony do pseudo-ORM sterowanego przez projektanta (lub bagna konfiguracji, jeśli próbowałeś zrobić to bez projektanta). Twój model może być teraz poco objects zamiast jakiegoś Designer driven partial class mangled bs, który jest nieodłącznie połączony z designer driven code, możesz uciec od projektanta całkowicie bez poczucia, że pływasz pod prąd, i ogólnie to po prostu czuje się, jakby słuchali społeczności lub faktycznie próbowali aby emulować istniejące, sprawdzone w boju rozwiązania, zamiast tworzyć wersję dla "Morts" lub jakiegokolwiek L2Sql miał być.

 4
Author: heisenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 20:25:37