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

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 ]

468 голосов
/ 21 сентября 2008

LINQ to SQL поддерживает только отображение 1: 1 таблиц базы данных, представлений, спроков и функций, доступных в 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. Таким образом, вы можете смешивать и сопоставлять несколько различных поставщиков баз данных, серверов приложений или протоколов для разработки агрегированной совокупности объектов, которые составлены из множества таблиц, источников, служб и т. Д. ADO.Net Framework была выпущена с .Net Framework 3.5 SP1.

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

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

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

  • LINQ to SQL - это простой и быстрый способ сделать это. Это означает, что вы будете работать быстрее и быстрее, если работаете над чем-то меньшим.
  • Entity Framework - это универсальный, без запретов способ сделать это. Это означает, что вы потратите больше времени вперед, будете медленнее развиваться и будете более гибкими, если будете работать над чем-то большим.
106 голосов
/ 03 ноября 2008

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

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

...

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

...

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

...

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

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

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

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

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

72 голосов
/ 21 апреля 2015

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 (модель данных сущностей), которая содержит:
    • SSDL (язык определения схемы хранения)
    • CSDL (язык определения концептуальной схемы)
    • MSL (Язык спецификации сопоставления)
  5. Отображения один-к-одному, один-ко-многим, многие-к-одному между таблицами и классами
  6. Поддерживает наследование:
    • TPH (таблица на иерархию)
    • TPT (таблица для каждого типа)
    • TPC (таблица для конкретного класса)
  7. Поддерживает сложные типы
  8. Первый код, первый - модель, первый подход к хранилищу
  9. Приложение-ориентированное представление базы данных
  10. Создано командой SQL Server
  11. Будущее API данных Microsoft

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

51 голосов
/ 08 декабря 2008

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

47 голосов
/ 23 марта 2012

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

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

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

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

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

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

36 голосов
/ 21 ноября 2008

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

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

23 голосов
/ 17 марта 2014

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

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

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

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

  • MySQL
  • Oracle
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

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

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

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

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