Teraz, gdy .NET v3.5 SP1 został wydany (wraz z VS2008 SP1), mamy teraz dostęp do frameworku encji .NET.
Moje pytanie brzmi: Kiedy próbujesz zdecydować się na użycie Entity Framework i LINQ do SQL jako ORM, jaka jest różnica?
W moim rozumieniu Entity Framework (w połączeniu z LINQ to Entities) jest „starszym bratem” LINQ na SQL? Jeśli tak jest - jakie to ma zalety? Co może zrobić, że LINQ to SQL nie może zrobić samodzielnie?
.net
entity-framework
linq-to-sql
Chris Roberts
źródło
źródło
Odpowiedzi:
LINQ na SQL obsługuje tylko mapowanie 1: 1 tabel bazy danych, widoków, sproców i funkcji dostępnych w Microsoft SQL Server. To świetny interfejs API do szybkiego budowania dostępu do danych w stosunkowo dobrze zaprojektowanych bazach danych SQL Server. LINQ2SQL został wydany po raz pierwszy z C # 3.0 i .Net Framework 3.5.
LINQ to Entities (ADO.Net Entity Framework) to API ORM (Object Relational Mapper), które pozwala na szeroką definicję modeli domen obiektowych i ich relacji z wieloma różnymi dostawcami danych ADO.Net. Jako taki, możesz mieszać i dopasowywać wielu różnych dostawców baz danych, serwerów aplikacji lub protokołów, aby zaprojektować zagregowane połączenie 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 jest dobry artykuł wprowadzający na temat MSDN: Wprowadzenie LINQ do danych relacyjnych
źródło
Myślę, że szybka i brudna odpowiedź brzmi:
źródło
Czy LINQ to SQL jest naprawdę martwy? autor: Jonathan Allen dla InfoQ.com
źródło
Istnieje wiele oczywistych różnic opisanych w tym artykule @lars, ale krótka odpowiedź to:
Pierwotnym założeniem było, że L2S służy do szybkiego rozwoju, a EF do bardziej „przedsiębiorczych” aplikacji n-tier, ale to trochę sprzedaje L2S.
źródło
LINQ do SQL
Entity Framework
Zobacz też:
źródło
dbSet<Orders>.Where()...ToList()
? Myślę, że wprowadzanie w błąd Entity Framework jest sprzeczne z LINQ i SQL.Moje doświadczenie z Entity Framework było mniej niż gwiezdne. Najpierw musisz dziedziczyć po klasach podstawowych EF, więc pożegnaj się z POCO. Twój projekt będzie musiał być oparty na EF. Dzięki LinqtoSQL mogłem używać moich istniejących obiektów biznesowych. Ponadto nie ma leniwego ładowania, musisz to zaimplementować samodzielnie. Istnieje kilka sposobów wykorzystania POCO i leniwego ładowania, ale istnieją IMHO, ponieważ EF nie jest jeszcze gotowy. Planuję wrócić do tego po 4.0
źródło
Znalazłem tutaj bardzo dobrą odpowiedź , która wyjaśnia, kiedy użyć tego, co w prostych słowach:
źródło
Mam wrażenie, że twoja baza danych jest dość bogata lub bardzo źle zaprojektowana, jeśli Linq2Sql nie spełnia twoich potrzeb. Mam około 10 stron internetowych, zarówno większych, jak i mniejszych, wszystkie korzystających z Linq2Sql. Szukałem frameworka Entity wiele razy, ale nie mogę znaleźć dobrego powodu, aby używać go w Linq2Sql. To powiedziawszy, staram się używać moich baz danych jako modelu, więc mam już mapowanie 1: 1 między modelem a bazą danych.
W mojej obecnej pracy mamy bazę danych z ponad 200 tabelami. Stara baza danych z wieloma złymi rozwiązaniami, dzięki czemu mogłam zobaczyć przewagę 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ż powolny. Używanie frameworku Entity w takiej bazie danych wydaje się być poprawką służącą do ukrycia złego modelu, ale nigdy nie może ukryć złej wydajności uzyskanej z takiej bazy danych.
źródło
Dobre porównanie można znaleźć tutaj:
http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Difference-between-LINQ-to-SQL-and-Entity-Framework.html
http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1
źródło
sqlmetal.exe
docs.microsoft.com/en-us/dotnet/framework/tools/… do generowania kodu / mapowania z bazy danych podczas używaniaLinq to SQL
Odpowiedzi tutaj obejmowały wiele różnic między Linq2Sql a EF, ale jest kluczowy punkt, na który nie poświęcono wiele uwagi: Linq2Sql obsługuje tylko SQL Server, podczas gdy EF ma dostawców dla następujących RDBMS:
Dostarczone przez Microsoft:
Za pośrednictwem zewnętrznych dostawców:
aby 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 bazowego magazynu danych. Może to być bardzo przydatne w sytuacjach, w których opracowujesz produkt, który chcesz zapewnić, że będzie współpracował z szeroką gamą popularnych RDBMS.
Inną sytuacją, w której ta abstrakcja jest użyteczna, jest sytuacja, w której należysz do zespołu programistów, który współpracuje z wieloma różnymi klientami lub różnymi jednostkami biznesowymi w organizacji, i chcesz poprawić produktywność programistów poprzez zmniejszenie liczby RDBMS, którymi muszą oni stać się obeznany w celu obsługi szeregu różnych aplikacji oprócz różnych RDBMS.
źródło
Odkryłem, że nie mogę korzystać z wielu baz danych w tym samym modelu bazy danych podczas korzystania z EF. Ale w linq2sql mógłbym po prostu poprzedzić nazwy schematów 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ę funkcję, ale pamiętam, że przeczytałem, że nie było to możliwe.
źródło
Jeśli twoja baza danych jest prosta i prosta, zrobi to LINQ to SQL. Jeśli potrzebujesz elementów logicznych / abstrakcyjnych na wierzchu swoich tabel, przejdź do Entity Framework.
źródło
Żadne z nich nie obsługuje jeszcze unikalnych typów danych SQL 2008. Różnica z mojej perspektywy polega na tym, że Entity nadal ma szansę zbudować model wokół mojego typu danych geograficznych w niektórych przyszłych wydaniach, a Linq na SQL, ponieważ jest porzucony, nigdy tego nie zrobi.
Zastanawiaj się, co słychać w nHibernate lub OpenAccess ...
źródło
Myślę, że jeśli chcesz szybko coś opracować bez dziwnych rzeczy pośrodku, a potrzebujesz obiektu, który ma byty reprezentujące twoje tabele:
Linq2Sql może być dobrym sojusznikiem, użycie go z LinQ uwalnia świetnie rozwijające się wyczucie czasu.
źródło
Pracuję dla klienta, który ma duży projekt korzystający z Linq-to-SQL. Kiedy projekt się rozpoczął, był to oczywisty wybór, ponieważ Entity Framework nie miał w tym czasie kilku głównych funkcji, a wydajność Linq-SQL była znacznie lepsza.
Teraz EF ewoluował i Linq-to-SQL nie obsługuje asynchronizacji, co jest doskonałe w przypadku wysoce skalowalnych usług. Czasami mamy ponad 100 żądań na sekundę i pomimo zoptymalizowania naszych baz danych, większość zapytań wciąż trwa kilka milisekund. Z powodu synchronicznych wywołań bazy danych wątek jest zablokowany i niedostępny dla innych żądań.
Myślimy o przejściu na Entity Framework, wyłącznie dla tej funkcji. Szkoda, że Microsoft nie zaimplementował obsługi asynchronizacji w Linq-to-SQL (lub open source, aby społeczność mogła to zrobić).
Dodatek grudzień 2018 r .: Microsoft zmierza w kierunku .NET Core, a Linq-2-SQL nie obsługuje .NET Core, więc musisz przejść do EF, aby mieć pewność, że w przyszłości możesz migrować do EF.Core.
Jest także kilka innych opcji do rozważenia, takich jak LLBLGen . Jest to dojrzałe rozwiązanie ORM, które istnieje już od dawna i zostało udowodnione, że jest bardziej przyszłościowe niż rozwiązania danych MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).
źródło
Jest dostawcą, który obsługuje tylko SQL Server. Jest to technologia mapowania służąca do mapowania tabel bazy danych SQL Server na obiekty .NET. Jest pierwszą próbą Microsoftu do ORM - Object-Relational Mapper.
To ten sam pomysł, ale przy użyciu Entity Framework w tle, podobnie jak ORM - ponownie od Microsoft, Obsługując wiele baz danych główną zaletą frameworku encji jest to, że programista może pracować na dowolnej bazie danych bez konieczności uczenia się składni, aby wykonywać dowolne operacje na różnych różnych bazach danych
źródło