Entity Framework против LINQ to SQL - PullRequest
       170

Entity Framework против LINQ to SQL

803 голосов
/ 12 августа 2008

Теперь, когда был выпущен .NET v3.5 SP1 (вместе с VS2008 SP1), у нас теперь есть доступ к структуре .NET.

Мой вопрос такой. При попытке выбора между использованием Entity Framework и LINQ to SQL в качестве ORM, в чем разница?

Как я понимаю, Entity Framework (при использовании с LINQ to Entities) является «старшим братом» для LINQ to SQL? Если это так, то какие преимущества он имеет? Что он может сделать, что LINQ to SQL не может сделать самостоятельно?

Ответы [ 17 ]

15 голосов
/ 17 февраля 2011

Я обнаружил, что не могу использовать несколько баз данных в рамках одной модели базы данных при использовании EF. Но в linq2sql я мог бы просто с помощью префикса имен схемы с именами базы данных.

Это была одна из причин, по которой я начал работать с linq2sql. Я не знаю, разрешил ли EF эту функцию, но я помню, что читал, что она предназначена для того, чтобы не допустить этого.

12 голосов
/ 17 сентября 2008

Если ваша база данных проста и понятна, LINQ to SQL подойдет. Если вам нужны логические / абстрагированные сущности поверх ваших таблиц, перейдите к Entity Framework.

8 голосов
/ 19 апреля 2009

Ни один из них еще не поддерживает уникальные типы данных SQL 2008. Разница с моей точки зрения заключается в том, что у Entity все еще есть возможность построить модель вокруг моего географического типа данных в каком-то будущем выпуске, и Linq to SQL, если от него отказаться, никогда не будет.

Интересно, что случилось с nHibernate или OpenAccess ...

7 голосов
/ 14 марта 2009

Я думаю, что если вам нужно разработать что-то быстрое без каких-либо странных вещей в середине, и вам нужна возможность иметь сущности, представляющие ваши таблицы:

Linq2Sql может быть хорошим союзником, если использовать его вместе с LinQ, это обеспечит отличные сроки разработки.

6 голосов
/ 07 мая 2017

Я работаю для клиента, у которого есть большой проект, использующий Linq-to-SQL. Когда проект начинался, это был очевидный выбор, потому что в Entity Framework в то время отсутствовали некоторые основные функции, а производительность Linq-to-SQL была намного лучше.

Теперь EF эволюционировал, и в Linq-to-SQL отсутствует асинхронная поддержка, которая отлично подходит для сильно масштабируемых сервисов. Иногда у нас более 100 запросов в секунду, и, несмотря на то, что мы оптимизировали наши базы данных, большинство запросов все еще занимает несколько миллисекунд. Из-за синхронных вызовов базы данных поток заблокирован и недоступен для других запросов.

Мы собираемся перейти на Entity Framework, исключительно для этой функции. Жаль, что Microsoft не внедрила асинхронную поддержку в Linq-to-SQL (или с открытым исходным кодом, чтобы сообщество могло это сделать).

Приложение, декабрь 2018 года: Microsoft движется в направлении .NET Core, а Linq-2-SQL не поддерживает .NET Core, поэтому вам нужно перейти на EF, чтобы убедиться, что вы можете перейти на EF .Core в будущем.

Есть также несколько других вариантов, таких как LLBLGen . Это зрелое ORM-решение, которое существует уже долгое время и оказалось более перспективным, чем решения для данных MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).

2 голосов
/ 21 февраля 2017

Linq к SQL

Это поставщик, он поддерживает только SQL Server. Это технология отображения для сопоставления таблиц базы данных SQL Server с объектами .NET. Это первая попытка Microsoft к ORM - объектно-реляционный картограф.

Linq к Entities

Это та же идея, но с использованием Entity Framework в фоновом режиме, так как ORM - опять-таки от Microsoft. Он поддерживает несколько баз данных. Основное преимущество Entity Framework - разработчик может работать с любой базой данных, не нужно изучать синтаксис для выполнения любая операция над разными базами данных

Согласно моему личному опыту, Ef лучше (если вы не имеете представления о SQL) производительность в LINQ немного выше по сравнению с EF по причине языка LINQ, написанного на лямбде.

2 голосов
/ 11 октября 2016

LINQ to SQL и Entity Framework выглядят одинаково на поверхности. Они оба обеспечивают LINQ запрашивает базу данных с использованием модели данных.

LINQ to SQL развился из проекта LINQ, который был создан командой, работающей с разработка языка. В то время Entity Framework был проектом команды Data Programmability и был ориентирован на язык Entity SQL. Microsoft полагает, что не намерена ограничивать LINQ to SQL.

LINQ to SQL по-прежнему является частью ADO.NET, в то время как платформа Entity имеет отдельный API. Платформа Entity Framework - это более поздняя версия LINQ to SQL. Платформа Entity использует Entity Data Model для соединения между вашим приложением и хранилищем данных. Именно Entity Data Model, или EDM, обеспечивает определение вашей концептуальной схемы, а также информацию о схеме базы данных, необходимую для взаимодействия с базой данных, и, наконец, схему сопоставления, которая связывается с двумя.

Вот некоторые задачи, выполняемые Entity Framework (модель данных Entity).

• Автоматически генерирует классы из модели и обновляет эти классы динамически в любое время, когда модель меняется.

• Заботится обо всех возможностях подключения к базе данных, чтобы разработчики не были обременены необходимостью писать много кода для взаимодействия с базой данных.

• Предоставляет общий синтаксис запросов для запросов к модели, а не к базе данных, а затем преобразует эти запросы в запросы, понятные для базы данных.

• Предоставляет механизм для отслеживания изменений объектов модели по мере их появления. используется в приложениях и обрабатывает обновления базы данных.

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