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


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

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

4 56

4 ответа:

Они несколько похожи и могут использоваться очень похожим образом, с точки зрения кода, но у них есть некоторые важные различия. Обратите внимание, что" 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-сервера функций, чем EF. Это в основном не так в .NET 4; они довольно похожи в этом отношении.
  • эф позволяет выбрать первую модель, БД, или код первой модели. LINQ to SQL, из коробки, действительно поддерживает только DB First.

эф достиг совершеннолетия с 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).

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

LINQ to SQL:

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

Entity Framework

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

  • Он создает .edmx в изначально файлов. Связь поддерживается с помощью 3 различных файлов .язык CSDL. ,МСЛ и .ssdl

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

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

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

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

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

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

более подробная информация

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