В чем разница между Entity Framework и LINQ to SQL.NET 4.0?

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Разница между LINQ to SQL и платформой Entity Framework:

LINQ to SQL:

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

Entity Framework

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

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

  • Он поддерживает сложный тип.

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

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

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

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

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

Подробнее

Ответ 4

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