Каково различие между Платформой Объекта и LINQ к SQL.NET 4.0?

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

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

58
задан Community 23 May 2017 в 12:03
поделиться

3 ответа

Они в чем-то похожи и могут использоваться очень похожим образом в коде, но у них есть некоторые важные отличия. Обратите внимание, что «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 позволяет выбрать моделирование сначала модель, сначала БД или сначала код. LINQ to SQL из коробки действительно поддерживает только DB First.
76
ответ дан 24 November 2019 в 18:53
поделиться

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

4
ответ дан 24 November 2019 в 18:53
поделиться

EF достигла совершеннолетия с версией 4.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).

17
ответ дан 24 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: