Entity Framework против LINQ to SQL

.net entity-framework linq-to-sql

251243 просмотра

17 ответа

11255 Репутация автора

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

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

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

Автор: Chris Roberts Источник Размещён: 12.08.2008 11:04

Ответы (17)


89 плюса

11263 Репутация автора

В этой статье @lars опубликовано несколько очевидных отличий, но короткий ответ:

  • L2S тесно связан - свойство объекта с конкретным полем базы данных или, точнее, сопоставление объекта с конкретной схемой базы данных
  • L2S будет работать только с SQL Server (насколько я знаю)
  • EF позволяет отображать один класс на несколько таблиц
  • EF будет обрабатывать отношения MM
  • EF будет иметь возможность предназначаться для любого поставщика данных ADO.NET

Первоначально предполагалось, что L2S предназначена для быстрой разработки, а EF - для более «корпоративных» n-уровневых приложений, но это продает L2S немного меньше.

Автор: JamesSugrue Размещён: 12.08.2008 11:15

194 плюса

6734 Репутация автора

Я думаю, что быстрый и грязный ответ заключается в том, что

  • LINQ to SQL - это простой и быстрый способ сделать это. Это означает, что вы будете работать быстрее и быстрее, если работаете над чем-то меньшим.
  • Entity Framework - это универсальный, не имеющий запретов способ сделать это. Это означает, что вы потратите больше времени на предварительную разработку, будете медленнее развиваться и будете более гибкими, если вы работаете над чем-то большим.
Автор: Brad Tutterow Размещён: 12.08.2008 04:00

12 плюса

1478 Репутация автора

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

Автор: vintana Размещён: 17.09.2008 07:22

459 плюса

5438 Репутация автора

Решение

LINQ to SQL поддерживает только отображение 1: 1 таблиц базы данных, представлений, sprocs и функций, доступных в Microsoft SQL Server. Это отличный API для быстрого доступа к данным для относительно хорошо спроектированных баз данных SQL Server. LINQ2SQL был впервые выпущен с C # 3.0 и .Net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) - это API-интерфейс ORM (Object Relational Mapper), который позволяет широко определять модели предметной области и их отношения со многими различными поставщиками данных ADO.Net. Таким образом, вы можете смешивать и сопоставлять несколько разных поставщиков баз данных, серверов приложений или протоколов для разработки агрегированной совокупности объектов, которые построены из различных таблиц, источников, служб и т. Д. .Net Framework 3.5 SP1.

Это хорошая вводная статья о MSDN: введение в LINQ для реляционных данных

Автор: Kris Размещён: 21.09.2008 03:22

106 плюса

31017 Репутация автора

LINQ to SQL действительно мертв? Джонатан Аллен для InfoQ.com

Мэтт Уоррен описывает [LINQ to SQL] как нечто, что «даже не должно было существовать». По сути, он просто должен был помочь им в разработке LINQ до тех пор, пока не будет готов настоящий ORM.

...

Масштаб Entity Framework заставил его пропустить крайний срок .NET 3.5 / Visual Studio 2008. Он был завершен вовремя, к сожалению, под названием «.NET 3.5 Service Pack 1», который больше походил на основной выпуск, чем на пакет обновления.

...

Разработчики не любят [ADO.NET Entity Framework] из-за сложности.

...

Начиная с .NET 4.0, LINQ to Entities будет рекомендованным решением для доступа к данным для LINQ для реляционных сценариев.

Автор: Zack Peterson Размещён: 03.11.2008 03:53

36 плюса

6661 Репутация автора

У меня сложилось впечатление, что ваша база данных довольно обширна или очень плохо спроектирована, если Linq2Sql не соответствует вашим потребностям. У меня есть около 10 веб-сайтов, больше и меньше, и все используют Linq2Sql. Я смотрел и Entity Framework много раз, но я не могу найти вескую причину для его использования над Linq2Sql. Тем не менее, я пытаюсь использовать свои базы данных в качестве модели, поэтому у меня уже есть соотношение 1: 1 между моделью и базой данных.

На моей текущей работе у нас есть база данных с более чем 200 таблицами. Старая база данных с множеством плохих решений, поэтому я мог видеть преимущество Entity Framework по сравнению с Linq2Sql, но все же я бы предпочел изменить структуру базы данных, поскольку база данных является ядром приложения, а если база данных плохо спроектирована и работает медленно, тогда мое приложение также будет медленным. Использование Entity Framework в такой базе данных кажется быстрым исправлением для маскировки плохой модели, но она никогда не сможет скрыть плохую производительность, которую вы получаете от такой базы данных.

Автор: terjetyl Размещён: 21.11.2008 07:52

50 плюса

864 Репутация автора

Мой опыт работы с Entity Framework был менее чем звездным. Во-первых, вы должны наследовать от базовых классов EF, так что попрощайтесь с POCO. Ваш дизайн должен быть вокруг EF. С LinqtoSQL я мог использовать свои существующие бизнес-объекты. Кроме того, нет ленивой загрузки, вы должны реализовать это самостоятельно. Есть некоторые способы использования POCO и отложенной загрузки, но они существуют, IMHO, потому что EF еще не готов. Я планирую вернуться к нему после 4.0

Автор: Jiyosub Размещён: 08.12.2008 03:50

7 плюса

3056 Репутация автора

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

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

Автор: MRFerocius Размещён: 14.03.2009 04:53

8 плюса

1120 Репутация автора

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

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

Автор: John Dunagan Размещён: 19.04.2009 05:48

15 плюса

1729 Репутация автора

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

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

Автор: Banford Размещён: 17.02.2011 03:36

47 плюса

252298 Репутация автора

Я нашел очень хороший ответ здесь , который объясняет , когда использовать то , что в простых словах:

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

  • Linq-To-Sql - используйте эту платформу, если вы планируете редактировать взаимно-однозначное соотношение ваших данных на уровне презентации. Это означает, что вы не планируете объединять данные из нескольких таблиц в одном представлении или странице.

  • Entity Framework - используйте эту платформу, если вы планируете объединять данные из более чем одной таблицы в вашем представлении или странице. Чтобы сделать это более понятным, приведенные выше термины относятся к данным, которые будут обрабатываться в вашем представлении или на странице, а не просто отображаться. Это важно понимать.

С Entity Framework вы можете «объединить» данные таблицы вместе, чтобы представить их на уровне представления в редактируемой форме, а затем, когда эта форма будет отправлена, EF будет знать, как обновить ВСЕ данные из различных таблиц.

Вероятно, есть более точные причины для выбора EF вместо L2S, но это, вероятно, будет легче понять. L2S не имеет возможности объединять данные для представления презентации.

Автор: Nawaz Размещён: 23.03.2012 03:52

22 плюса

6555 Репутация автора

Ответы здесь покрыли многие из различий между Linq2Sql и EF, но есть ключевой момент, которому не уделялось много внимания: Linq2Sql поддерживает только SQL Server, тогда как EF имеет поставщиков для следующих RDBMS:

Предоставлено Microsoft:

  • Драйверы ADO.NET для SQL Server, OBDC и OLE DB

Через сторонних поставщиков:

  • MySQL
  • оракул
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • жар-птица
  • Npgsql

назвать несколько.

Это делает EF мощной программной абстракцией для вашего хранилища реляционных данных, а это означает, что разработчики имеют согласованную модель программирования для работы независимо от базового хранилища данных. Это может быть очень полезно в ситуациях, когда вы разрабатываете продукт, который хотите обеспечить совместимостью с широким спектром СУБД.

Другая ситуация, когда эта абстракция полезна, - это то, что вы являетесь частью команды разработчиков, которая работает с несколькими различными клиентами или различными бизнес-единицами в организации, и вы хотите повысить производительность труда разработчиков, сократив число СУБД, которыми они должны стать. знакомы с тем, чтобы поддерживать ряд различных приложений поверх различных СУБД.

Автор: saille Размещён: 17.03.2014 03:19

65 плюса

16810 Репутация автора

LINQ to SQL

  1. Однородный источник данных: SQL Server
  2. Рекомендуется только для небольших проектов, где структура данных хорошо разработана
  3. Сопоставление можно изменить без перекомпиляции с помощью SqlMetal.exe.
  4. .dbml (язык разметки базы данных)
  5. Индивидуальное отображение между таблицами и классами
  6. Поддерживает наследование TPH
  7. Не поддерживает сложные типы
  8. Подход к хранилищу
  9. База данных-ориентированное представление базы данных
  10. Создано командой C #
  11. Поддерживается, но дальнейшие улучшения не предусмотрены

Entity Framework

  1. Источник данных Heterogeneus: поддержка многих поставщиков данных
  2. Рекомендуется для всех новых проектов, кроме:
    • маленькие (LINQ to SQL)
    • когда источником данных является плоский файл (ADO.NET)
  3. Сопоставление может быть изменено без перекомпиляции при настройке файлов модели и сопоставления. Процесс артефакта метаданных для копирования в каталог вывода
  4. .edmx (Entity Data Model), которая содержит:
    • SSDL (язык определения схемы хранения)
    • CSDL (язык определения концептуальной схемы)
    • MSL (язык спецификации картографирования)
  5. Отображения один-к-одному, один-ко-многим, многие-к-одному между таблицами и классами
  6. Поддерживает наследование:
    • TPH (таблица на иерархию)
    • TPT (таблица для каждого типа)
    • TPC (таблица на конкретный класс)
  7. Поддерживает сложные типы
  8. Подходы «сначала код», «сначала модель», «сначала хранилище»
  9. Ориентированное на приложение представление базы данных
  10. Создано командой SQL Server
  11. Будущее API данных Microsoft

Смотрите также:

Автор: Ryszard Dżegan Размещён: 21.04.2015 08:26

24 плюса

2984 Репутация автора

2 плюса

2229 Репутация автора

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 - это более поздняя версия LINQ to SQL. Платформа Entity использует Entity Data Model для соединения между вашим приложением и вашим хранилищем данных. Именно Entity Data Model, или EDM, обеспечивает определение вашей концептуальной схемы, а также информацию о схеме базы данных, необходимую для взаимодействия с базой данных, и, наконец, схему сопоставления, которая связана с двумя.

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

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

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

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

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

Автор: Rajput Размещён: 11.10.2016 09:34

1 плюс

1036 Репутация автора

Linq к SQL

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

Linq к Entities

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

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

Автор: Umang Patwa Размещён: 21.02.2017 05:36

6 плюса

1924 Репутация автора

Я работаю на клиента, у которого есть большой проект, использующий 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).

Автор: Ramon de Klein Размещён: 07.05.2017 05:43
Вопросы из категории :
32x32