В чем разница между Entity Framework и LINQ to SQL в .NET 4.0? - PullRequest
58 голосов
/ 21 июля 2010

Я проверял 2-е издание Professional ASP.NET MVC и понял, что EF заменил LINQ на SQL.Я знаком с LINQ to SQL из первой книги, но ничего не знаю об EF.В любом случае, при чтении кода кажется, что ничего не изменилось, кроме названия.Те же старые классы репозитория, те же старые функции.

Я провел небольшое исследование.Я знаю, что LINQ не ограничивается SQL.Также EF не ограничивается SQL-серверами семейства Microsoft. В этом двухлетнем вопросе люди недовольны EF, говоря, что он слишком сложен и все такое.Но сейчас я читаю тот же код под именем EF.Только классы создаются с ADO.NET Entity Model, установленной из LINQ to SQL.Кто-нибудь может прояснить суету об особенностях EF, поскольку теперь это де-факто стандартная ORM?

Ответы [ 5 ]

76 голосов
/ 21 июля 2010

Они несколько похожи и могут использоваться очень похожим образом, с точки зрения кода, но у них есть некоторые важные различия.Обратите внимание, что «LINQ» - это не то же самое, что «LINQ to SQL»;EF также использует LINQ.Вот некоторые заметные отличия:

  • LINQ to SQL - это в основном только SQL Server, причем не столько по конструкции, сколько по реализации.EF разработан для поддержки и поддерживает несколько БД, если у вас есть совместимый поставщик ADO.NET.
  • Из коробки LINQ to SQL имеет очень плохую историю для изменения метаданных БД.Вы должны заново создать части своей модели, и вы потеряете настройки.
  • EF поддерживает такие функции модели, как отношения «многие ко многим» и наследование.LINQ to SQL не поддерживает их напрямую.
  • В .NET 3.5 LINQ to SQL гораздо лучше поддерживал специфичные для SQL-Server функции, чем EF.В большинстве случаев это не так в .NET 4;в этом отношении они довольно похожи.
  • EF позволяет выбирать моделирование сначала, сначала DB, или моделирование сначала.Из коробки LINQ to SQL действительно поддерживает только DB First.
17 голосов
/ 21 июля 2010

EF достиг совершеннолетия с v4.0. До этого было немного неудобно, и я не рекомендовал это. Теперь я рекомендую, чтобы все новые коды LINQ-to- DB использовали EF4.

Что касается новых функций, часть LINQ на самом деле очень похожа на LINQ to SQL. Но это совсем другая архитектура: EF4 действует как поставщик LINQ для (EF) ADO.NET-поставщика, который затем оборачивает другого ADO.NET-поставщика. Так что появились новые вещи, такие как Entity SQL (который я не использую) и EF, поддерживающие различных базовых провайдеров ADO.NET (которые я использую).

Система моделирования XML, которую использует EF, также позволяет более мощные абстракции отображения . Я регулярно использую разные таблицы с одинаковыми первичными ключами, отображающими отношения наследования сущностей; насколько я понимаю, единственный способ сделать это в LINQ to SQL - через «столбец селектора» (хотя я никогда не пробовал это в LINQ to SQL).

13 голосов
/ 09 апреля 2015

Разница между LINQ to SQL и Entity Framework:

LINQ to SQL:

  • Работает только с базой данных SQL Server.
  • Он генерирует .dbml для поддержания отношения
  • Он не поддерживает сложный тип.
  • Он не может генерировать базу данных из модели.
  • Он позволяет отображать только один к одномумежду классами сущностей и реляционными таблицами /views.
  • Позволяет запрашивать данные с использованием DataContext.
  • Обеспечивает тесно связанный подход.
  • Может использоваться длябыстрая разработка приложений только с SQL Server.

Entity Framework

  • Может работать с различными базами данных, такими как Oracle, DB2, MYSQL,SQL Server и т. Д.

  • Первоначально генерируются файлы EDMX.Связь поддерживается с использованием 3 разных файлов .csdl, .msl и .ssdl

  • . Имеет поддержку сложного типа.

  • Может генерироватьбаза данных из модели.

  • Позволяет сопоставления один-к-одному, один-ко-многим и многие-ко-многим между классами сущностей и реляционными таблицами / представлениями

  • Позволяет запрашивать данные с использованием EntitySQL, ObjectContext, DbContext.

  • Обеспечивает слабосвязанный подход.Поскольку его подход, основанный на коде, позволяет использовать шаблон внедрения зависимостей, что делает его слабо связанным.

  • Он может использоваться для быстрой разработки приложений с использованием СУБД, таких как SQL Server, Oracle, DB2, MySQL и т. Д..

Подробнее

4 голосов
/ 21 июля 2010

Последняя версия EF намного более устойчива, и вы не будете вынуждены использовать псевдо-ORM, управляемый дизайнером (или массу конфигураций, если вы пытались сделать это без дизайнера).Теперь ваша модель может быть объектами POCO, а не некоторыми управляемыми дизайнером частичными классами, искаженными bs, которые неразрывно связаны с кодом, управляемым дизайнером, вы можете полностью отойти от дизайнера, не чувствуя, что плывете вверх по течению, и в целом у вас такое чувство, что онивыслушал сообщество или фактически пытался подражать существующим, проверенным в бою решениям, вместо того, чтобы делать версию для "Morts" или чего-то еще, что L2Sql должен был быть.

0 голосов
/ 28 октября 2018

LINQ to SQL дает вам право запрашивать и изменять базу данных SQL Server с использованием синтаксиса LINQ. Entity Framework - это отличный ORM, поставляемый Microsoft, который позволяет вам запрашивать и изменять СУБД, такие как SQL Server, Oracle, DB2, MySQL и т. Д., Используя синтаксис LINQ. Сегодня EF широко используется каждым приложением .NET для запросов к базе данных.

Другими словами, LINQ используется для соединения кода C # с различными объектами в памяти. Entity Framework - это структура объектно-реляционного отображения (ORM) для подключения кода C # к внешним базам данных, обычно к SQL Server. LINQ - это язык запросов, встроенный в C # и набор методов расширения, чтобы сделать его полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...