.net - Entity Framework vs LINQ to SQL




linq to sql vs entity framework (12)

Linq к SQL

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

Linq к Entities

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

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

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

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

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


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 datasource: поддержка многих поставщиков данных
  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

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


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

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


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

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

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

Через сторонние провайдеры:

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

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

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

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


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


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

Интересно, что происходит с nHibernate или OpenAccess ...


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

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


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

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


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

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

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

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

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

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


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

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


Является ли 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 к реляционным сценариям.






linq-to-sql