Entity Framework vs LINQ to SQL



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



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



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

670   17  

17 ответов:

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

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

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

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

действительно ли 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 to relational.

есть ряд очевидных различий, изложенных в этой статье @lars posted, но короткий ответ:

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

первоначально предпосылка была L2S для быстрого развития, и EF для больше применений N-яруса "enterprisey", но то продает L2S немного короткий.

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. будущее данных Microsoft APIs

Читайте также:

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

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

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

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

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

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

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

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

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

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

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

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

через третьих лиц провайдеры:

  • MySQL
  • Oracle
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Жар
  • Npgsql

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

разделяемый

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

Linq-to-Entities

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

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

Comments

    Ничего не найдено.