Entity Framework vs LINQ to SQL

Teraz, gdy.NET V3. 5 SP1 został wydany (wraz z VS2008 SP1), mamy teraz dostęp do. NET entity framework.

Moje pytanie jest takie. Kiedy próbujesz zdecydować między używaniem encji Framework i LINQ do SQL jako ORM, jaka jest różnica?

Tak jak to Rozumiem, Entity Framework (gdy jest używany z LINQ to Entities) jest 'big brotherem' dla LINQ to SQL? Jeśli tak jest - jakie ma to zalety? Co może zrobić, czego LINQ do SQL nie może zrobić na swoim własne?

Author: Charles, 2008-08-12

17 answers

LINQ do SQL obsługuje tylko mapowanie 1 do 1 tabel baz danych, widoków, zębatek i funkcji dostępnych w Microsoft SQL Server. Jest to świetne API do szybkiego dostępu do danych do stosunkowo dobrze zaprojektowanych baz danych SQL Server. LINQ2SQL został po raz pierwszy wydany z C # 3.0 i. Net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) jest API ORM (Object Relational Mapper), które pozwala na szeroką definicję modeli domen obiektowych i ich relacji do wielu różne ADO.Net dostawcy danych. W związku z tym można mieszać i dopasowywać wiele różnych dostawców baz danych, serwerów aplikacji lub protokołów w celu zaprojektowania zagregowanego mash-up obiektów, które są zbudowane z różnych tabel, źródeł, usług itp. ADO.Net Framework został wydany z. Net Framework 3.5 SP1.

To dobry artykuł wprowadzający do MSDN: Wprowadzenie LINQ do danych relacyjnych

 450
Author: Kris,
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
2008-09-21 03:22:59

Myślę, że szybka i brudna odpowiedź jest taka, że

  • LINQ do SQL jest szybkim i łatwym sposobem na to. Oznacza to, że będziesz szybciej i szybciej dostarczać, jeśli pracujesz nad czymś mniejszym.
  • Entity Framework jest najlepszym sposobem, aby to zrobić. Oznacza to, że poświęcisz więcej czasu z góry, będziesz rozwijać się wolniej i będziesz mieć większą elastyczność, jeśli pracujesz nad czymś większym.
 190
Author: Brad Tutterow,
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
2009-05-23 00:14:03

Czy LINQ to SQL jest naprawdę martwy? by Jonathan Allen for InfoQ.com

Matt Warren opisuje [LINQ do SQL] jako coś, co "nigdy nie miało istnieć."Zasadniczo miał to być tylko stand-in, aby pomóc im rozwijać LINQ, dopóki prawdziwy ORM nie będzie gotowy.

...

Skala Entity Framework spowodowała, że nie dotrzymał terminu. NET 3.5 / Visual Studio 2008. Został ukończony na czas niestety o nazwie". NET 3.5 Service Pack 1", co było bardziej jak Główne wydanie niż dodatek service pack.

...

Deweloperzy nie lubią [ADO.NET Entity Framework] ze względu na złożoność.

...

[[0]} od wersji. NET 4.0, LINQ to Entities będzie zalecanym rozwiązaniem dostępu do danych dla scenariuszy relacyjnych LINQ to.
 104
Author: Zack Peterson,
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
2008-11-03 15:53:25

Istnieje wiele oczywistych różnic przedstawionych w tym artykule @lars opublikowany, ale krótka odpowiedź brzmi:

  • L2S jest ściśle sprzężoną właściwością obiektu do określonego pola bazy danych lub bardziej poprawnym mapowaniem obiektu do określonego schematu bazy danych
  • L2S będzie działać tylko z SQL serverem (o ile wiem)
  • EF umożliwia mapowanie jednej klasy do wielu tabel
  • EF będzie obsługiwał relacje M-M
  • EF będzie miał możliwość celowania w dowolne ADO.NET dane provider

Pierwotnie założeniem było L2S jest dla szybkiego rozwoju, a EF dla bardziej "przedsiębiorczych" aplikacji n-tier, ale to sprzedaje L2S trochę za krótko.

 86
Author: JamesSugrue,
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
2008-08-12 11:15:24

LINQ do SQL

  1. homogeniczne datasource: SQL Server
  2. zalecane dla małych projektów tylko tam, gdzie struktura danych jest dobrze zaprojektowana
  3. mapowanie można zmienić bez ponownej kompilacji za pomocą SqlMetal.exe
  4. .dbml (Database Markup Language)
  5. mapowanie jeden do jednego między tabelami i klasami
  6. Obsługuje TPH dziedziczenie
  7. nie obsługuje typów złożonych
  8. przechowywanie-pierwsze podejście
  9. widok bazodanowy baza danych
  10. Created by C# team
  11. Obsługiwane, ale nie zamierzone dalsze ulepszenia

Entity Framework

  1. Heterogeneus datasource: Obsługa wielu dostawców danych
  2. zalecane dla wszystkich nowych projektów z wyjątkiem:
    • small ones (LINQ to SQL)
    • gdy źródłem danych jest plik płaski (ADO.NET)
  3. mapowanie można zmienić bez ponownej kompilacji podczas ustawiania procesu tworzenia metadanych plików modelu i mapowania do skopiowania Output Directory
  4. .edmx (Entity Data Model), który zawiera:
    • SSDL (Storage Schema Definition Language)
    • CSDL (Conceptual Schema Definition Language)
    • MSL (Mapping Specification Language)
  5. jeden do jednego, jeden do wielu, wiele do jednego mapowania między tabelami i klasami
  6. wspiera dziedziczenie:
    • TPH (tabela na hierarchię)
    • TPT (tabela Na Typ)
    • TPC (tabela na klasę betonu)
  7. podpory typy złożone
  8. Code-first, Model-first, Storage-first approaches
  9. Application-centric view of a database
  10. Created by SQL Server team
  11. przyszłość interfejsów API danych Microsoft

Zobacz też:

 61
Author: Ryszard Dżegan,
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-05-13 08:36:58

Moje doświadczenie z Entity Framework było mniej niż gwiezdne. Najpierw musisz dziedziczyć po klasach bazowych EF, więc pożegnaj się z POCOs. Twój projekt będzie musiał być wokół EF. Dzięki LinqtoSQL mogłem korzystać z istniejących obiektów biznesowych. Dodatkowo nie ma leniwego ładowania, musisz to zaimplementować samodzielnie. Jest trochę pracy, aby korzystać z POCOs i leniwego ładowania, ale istnieją IMHO, ponieważ EF nie jest jeszcze gotowy. Planuję wrócić do niego po 4.0

 50
Author: Jiyosub,
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
2008-12-08 03:50:54

Znalazłem bardzo dobrą odpowiedź tutaj która wyjaśnia, Kiedy używać co w prostych słowach:

Podstawową zasadą dla jakiego frameworka użyć jest sposób planowania na edycja danych w warstwie prezentacji.

  • Linq-to-Sql - użyj tego frameworka, jeśli planujesz edytować jeden do jednego relacja Twoich danych w warstwie prezentacji. Czyli ty nie planuj łączenia danych z więcej niż jednej tabeli w jednym widoku albo strona.

  • Entity Framework - użyj tego frameworka, jeśli planujesz łączenie danych z więcej niż jednej tabeli w widoku lub na stronie. Aby tym jaśniej, powyższe terminy są specyficzne dla danych, które będą manipulowane w widoku lub stronie, a nie tylko wyświetlane. To jest ważne, aby zrozumieć.

Za pomocą encji Framework możesz "scalić" złożone dane razem do przedstawienia na warstwie prezentacji w formie edytowalnej, a następnie kiedy to formularz zostanie przesłany, EF będzie wiedział, jak zaktualizować wszystkie dane z różnych stołów.

Są prawdopodobnie dokładniejsze powody, aby wybrać EF zamiast L2, ale to byłoby chyba najłatwiejsze do zrozumienia. L2S nie możliwość scalania danych do wyświetlania prezentacji.

 46
Author: Nawaz,
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
2012-03-23 15:52:54

Mam wrażenie, że Twoja baza danych jest dość obszerna lub bardzo źle zaprojektowana, jeśli Linq2Sql nie pasuje do Twoich potrzeb. Mam około 10 stron internetowych zarówno większych, jak i mniejszych, wszystkie używające Linq2Sql. Szukałem i encji framework wiele razy, ale nie mogę znaleźć dobrego powodu, aby używać go nad Linq2Sql. To powiedziawszy staram się używać moich baz danych jako modelu, więc Mam już mapowanie 1 do 1 między modelem a bazą danych.

W mojej obecnej pracy mamy bazę danych z 200 + tabel. Stara baza danych z wiele złych rozwiązań, więc nie mogłem zobaczyć korzyści z Entity Framework nad Linq2Sql, ale nadal wolałbym przeprojektować bazę danych, ponieważ baza danych jest silnikiem aplikacji i jeśli baza danych jest źle zaprojektowana i powolna, to moja aplikacja będzie również powolna. Używanie struktury encji na takiej bazie danych wydaje się być quickfixem, aby ukryć zły model, ale nigdy nie może ukryć złej wydajności, którą uzyskujesz z takiej bazy danych.

 35
Author: terjetyl,
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
2008-11-21 19:52:18
 23
Author: Omer K,
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
2016-08-25 07:14:06

Odpowiedzi tutaj obejmują wiele różnic między Linq2Sql i EF, ale jest kluczowy punkt, który nie został poświęcony zbytnio: Linq2Sql obsługuje tylko SQL Server, podczas gdy EF ma dostawców dla następujących RDBMS:

Dostarczone przez Microsoft:

  • ADO.NET sterowniki dla SQL Server, OBDC i OLE DB

Przez stronę trzecią dostawcy:

  • MySQL
  • Oracle
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

By wymienić tylko kilka.

To sprawia, że EF jest potężną abstrakcją programowania nad relacyjnym magazynem danych, co oznacza, że programiści mają spójny model programowania do pracy niezależnie od podstawowego magazynu danych. Może to być bardzo przydatne w sytuacjach gdzie opracowujesz produkt, który chcesz zapewnić, będzie współdziałał z szeroką gamą popularnych RDBM.

Inną sytuacją, w której ta abstrakcja jest przydatna, jest to, że jesteś częścią zespołu programistów, który współpracuje z wieloma różnymi klientami lub różnymi jednostkami biznesowymi w organizacji i chcesz zwiększyć produktywność deweloperów poprzez zmniejszenie liczby RDBM, z którymi muszą się zapoznać, aby obsługiwać szereg różnych aplikacji na szczycie z różnych RDBMS.

 21
Author: saille,
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
2014-03-17 03:19:58

Odkryłem, że nie mogę używać wielu baz danych w ramach tego samego modelu bazy danych podczas korzystania z EF. Ale w linq2sql mogłem po prostu przez prefiks nazw schematów z nazwami baz danych.

To był jeden z powodów, dla których zacząłem pracować z linq2sql. Nie wiem, czy EF jeszcze zezwolił na tę funkcjonalność, ale pamiętam, że czytałem, że był przeznaczony do tego, aby na to nie pozwolić.

 15
Author: Banford,
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
2011-02-17 15:36:00

Jeśli twoja baza danych jest prosta i prosta, zrobi to LINQ do SQL. Jeśli potrzebujesz logicznych / abstrakcyjnych encji na górze tabel, przejdź do struktury encji.

 12
Author: vintana,
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
2008-09-17 07:22:11

Jeszcze nie obsługuje unikalnych typów danych SQL 2008. Różnica z mojego punktu widzenia jest taka, że Entity nadal ma szansę skonstruować model wokół mojego geograficznego typu danych w jakimś przyszłym wydaniu, a Linq do SQL, będąc porzucony, nigdy nie będzie.

Ciekawe o co chodzi z nHibernate, czyli OpenAccess...

 8
Author: John Dunagan,
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
2009-04-19 05:48:50

Myślę, że jeśli potrzebujesz szybko stworzyć coś bez dziwnych rzeczy w środku, a potrzebujesz obiektu, aby mieć encje reprezentujące Twoje tabele:

Linq2Sql może być dobrym sprzymierzeńcem, używanie go z LinQ uwalnia świetny czas rozwoju.

 7
Author: MRFerocius,
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
2013-10-14 10:22:49

Pracuję dla klienta, który ma duży projekt, który używa Linq-to-SQL. Kiedy projekt się rozpoczął, był to oczywisty wybór, ponieważ Entity Framework brakowało kilku głównych funkcji w tym czasie, a wydajność Linq-to-SQL była znacznie lepsza.

Teraz EF ewoluował i Linq-to-SQL nie ma głównej funkcji dla wysoce skalowalnych usług, a mianowicie wsparcia dla operacji asynchronicznych. Czasami mamy ponad 100 zapytań na sekundę i mimo, że zoptymalizowaliśmy nasze bazy danych, większość zapytań nadal trwa kilka milisekund, aby zakończyć. Z powodu synchronicznych wywołań bazy danych wątek jest blokowany i niedostępny dla innych żądań.

Myślimy o przełączeniu się na Entity Framework, wyłącznie dla tej funkcji. Szkoda, że Microsoft nie zaimplementował obsługi asynchronicznej do Linq-to-SQL (lub open-sourcingu, żeby społeczność mogła to zrobić).

 4
Author: Ramon de Klein,
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
2017-05-07 17:43:56

LINQ do SQL i struktura encji wyglądają podobnie na powierzchni. Oba zapewniają LINQ zapytuje o bazę danych przy użyciu modelu danych.

LINQ do SQL ewoluował z projektu LINQ, który wyszedł z zespołu pracującego z rozwój języka.Podczas gdy Entity Framework był projektem zespołu programistycznego danych i był skoncentrowany na języku SQL Entity. Microsoft nie zamierza deprymować LINQ do SQL.

LINQ do SQL jest nadal częścią ADO.NET while Entity framework posiada oddzielne API. Entity framework jest wyższą wersją LINQ do SQL.Platforma Entity framework wykorzystuje model danych Entity do łączenia aplikacji z magazynem danych. Jest to model danych podmiotu lub EDM, który zapewnia definicję schematu koncepcyjnego, a także informacje o schemacie bazy danych niezbędne do interakcji z bazą danych i wreszcie schemat mapowania, który łączy się z dwoma.

Oto niektóre zadania wykonywane przez Entity Framework(Entity data model).

* automatycznie generuje klasy z modelu i aktualizuje te klasy dynamicznie za każdym razem, gdy zmienia się model.

* dba o wszystkie połączenia z bazą danych, dzięki czemu programiści nie są obciążeni koniecznością pisania dużej ilości kodu do interakcji z bazą danych.

* dostarcza typową składnię zapytań do modelu, a nie do bazy danych, a następnie tłumaczy te zapytania na zapytania, które baza danych może zrozumieć.

• zapewnia mechanizm do śledzenia zmian w obiektach modelu w miarę ich używany w aplikacjach i obsługuje aktualizacje bazy danych.

 2
Author: Rajput,
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
2016-10-11 09:34:26

Linq-to-SQL

jest dostawcą, który obsługuje tylko SQL Server. Jest to technologia mapowania mapowania tabel bazy danych SQL Server do obiektów. NET. To pierwsza próba Microsoftu na MAPERZE ORM - Object-Relational.

Linq-to-Entities

to ten sam pomysł, ale za pomocą Entity Framework w tle, jak ORM - ponownie od Microsoft, To wspieranie wielu baz danych główną zaletą entity framework jest deweloper może pracować na każdym baza danych nie trzeba uczyć się składni, aby wykonać jakąkolwiek operację na różnych bazach danych

Według mojego osobistego doświadczenia Ef jest lepszy (jeśli nie masz pojęcia o SQL) wydajność w LINQ jest nieco szybsza w porównaniu do języka LINQ napisanego w lambda.

 2
Author: Umang Patwa,
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
2017-02-21 05:36:24