Entity Framework против 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 не может сделать сам по себе?

Я думаю, что ответы, приведенные ниже, следует пересмотреть, потому что прошло много времени с момента выпуска EF, поэтому новые разработчики, которые сюда попадают, могут получить неправильное впечатление. EF стал ОТЛИЧНЫМ и ЛЕГКИМ инструментом с момента его первого выпуска. Вы просто устанавливаете соединение с БД, и это вроде 90% всего, что вам нужно. Очень быстрое развитие с точки зрения опытных! Отсюда - LINQ - ваш лучший друг. Он легко настраивается, MVC просто в восторге, а людям, которые говорят, что это плохо - сначала научитесь его использовать (а также закрепите LINQ)!

graumanoz 03.08.2013 18:21

Просто чтобы было ясно - у вас нет выбора сейчас - MSFT фактически убила LINQ2SQL в пользу EF. Однако тот факт, что EF с открытым исходным кодом MSFT помог ему меньше отстой и определенно становится лучше. Но для тех, кто попадает в EF, обязательно поймите, что в EF все еще есть много причуд. Я писал об одном - stackoverflow.com/questions/305092/…

nikib3ro 29.08.2013 01:09

@ kape123, (а) LINQ to SQL не «мертвый»; это все еще можно использовать; (b) LINQ to SQL - стандартный метод доступа к данным при разработке Windows Phone 8.

Ryan Lundy 28.01.2014 20:00

@Kyralessa Только что откопал эту ветку .. LINQ to SQL "мертвый", как и в, официально не поддерживается Microsoft.

user3308043 20.05.2014 09:50

@ user3308043, [необходима ссылка].

Ryan Lundy 20.05.2014 18:01

@Kyralessa - Начиная с 2010 года (с выпуском .NET4.0, самое последнее упоминание, которое я смог найти), М.С. признал, что, хотя некоторые инвестиции могут быть сделаны в LINQ2SQL, «основная часть наших общих инвестиций будет в Entity Framework. "

kmote 07.08.2015 02:05

@HameedSyed, это неправда, это Dapper, его даже разработала SO (Сэм Саффро).

gdoron is supporting Monica 22.03.2017 13:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
842
7
274 038
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

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

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

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

Ваша цитата «L2S будет работать только с SQL Server (насколько я знаю)» нуждается в обновлении: проект с открытым исходным кодом «dblinq» заменяет сборку LINQ to SQL на сборку, которая может взаимодействовать с MySQL, PostgreSQL, Ingres, Firebird, SQLite. .. и Microsoft SQL (конечно).

Contango 24.12.2010 14:41

подождите ... значит, EF не создает сильно связанные объекты DL?

PositiveGuy 30.12.2010 08:21

да, исходная посылка о том, что L2S не является корпоративным решением, больше не соответствует действительности. Я имею в виду, что StackOverflow работает на L2S и на множестве других .com, таких как Redbox и многих других.

PositiveGuy 30.12.2010 08:22

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

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

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

Paul Mendoza 15.10.2009 01:06

Брэд, что бы вы посоветовали для сайта электронной торговли? Я имею в виду, что я не вижу ничего, кроме простых CRUD, происходящих там ...

PositiveGuy 22.12.2010 07:30

@CoffeeAddict, очевидно, в тройке самых популярных ответов говорится, что L2S для простого CRUD

IsmailS 28.12.2010 12:43

@Paul Mendoza Теперь, когда EF поддерживает ленивую загрузку, вы все равно скажете, что L2S требует меньше строк кода? В настоящее время я работаю с L2S и подумываю о переходе на EF, поскольку мое простое приложение CRUD становится чем-то гораздо более крупным и сложным. Я согласен, что без ленивой загрузки EF я бы держался подальше.

Banford 17.02.2011 18:26

@Banford С EF в .NET 4.0 я думаю, что он лучше L2S. Функции, отсутствующие в EF в 3.5, но L2S были добавлены в EF в .NET 4.0. Теперь ваши операторы LINQ в EF в .NET 4.0 будут выглядеть примерно так же, как в L2S. EF дает вам несколько дополнительных вещей, которые вы можете сделать прямо сейчас, помимо того, что предлагает L2S.

Paul Mendoza 17.02.2011 21:15

Этому ответу уже 5 лет, и он довольно устарел. Entity Framework 6 сейчас находится в бета-версии и значительно улучшен, включает ленивую загрузку, поддержку перечислений и т. д. И т. Д.

Tim 02.08.2013 03:42

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

Entity Framework позволяет создать уровень абстракции в верхней части базы данных. Проблема со многими OR Mappers сегодня (на мой взгляд) заключается в том, что они обеспечивают сопоставление 1: 1 между таблицами и классами. Модель базы данных не всегда отражает то, как мы думаем о ней с точки зрения бизнес-модели.

senfo 02.10.2008 04:35

Кончилось место. В любом случае, основываясь на том, что я сказал выше, я бы сказал, что ваш ответ неполный.

senfo 02.10.2008 04:36

Я считаю, что это действительно плохой совет. L2S - это хорошо несмотря на простоты или сложности вашей базы данных. Настоящая ловушка - это отсутствие должного разделения проблем. Если вы попытаетесь объединить свой бизнес-уровень и уровень доступа к данным и использовать свои Linqed-объекты для всего, вы обнаружите ограничение L2S. Но это проблема излишне упрощенного и монолитного дизайна. L2S представляет собой отличный DAL, и если вы считаете, что запросы и постоянство являются отдельной заботой ваших бизнес-правил, в долгосрочной перспективе вы избавите себя от множества проблем во многих областях.

mattmc3 28.07.2010 03:29

это мне ничего не говорит. Что в ваших терминах просто?

PositiveGuy 30.12.2010 08:27

и что вы имеете в виду как пример необходимости «логического / абстрактного». Да, я знаю, что такое абстракция, но пример в вашем контексте, пожалуйста ... объясните мне, что именно вы говорите ... опишите это, а не просто используйте общий сленг ... это все относительно того, что говорит говорящий эти слова, поэтому я понятия не имею, что ВЫ имеете в виду под этим.

PositiveGuy 30.12.2010 08:28
Ответ принят как подходящий

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 для реляционных данных

похоже, вы используете LINQ to SQL для запроса в EF

PositiveGuy 29.12.2010 07:15

@CoffeeAddict, хотя они очень похожи по стилю с использованием лямбда-выражений LINQ, каждый API имеет совершенно разные основы. Например, способ, которым LINQ2SQL генерирует SQL-запросы, позволяет использовать функции SQL, тогда как L2E не делает этого или, по крайней мере, не делает этого с 2008 года.

Kris 31.01.2011 23:41

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

Antoine Pelletier 26.11.2015 21:46

Этот ответ устарел. Теперь Linq to SQL поддерживает отображение one2many

George Lanetz 29.12.2015 16:18

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

Matt Warren describes [LINQ to SQL] as something that "was never even supposed to exist." Essentially, it was just supposed to be stand-in to help them develop LINQ until the real ORM was ready.

...

The scale of Entity Framework caused it to miss the .NET 3.5/Visual Studio 2008 deadline. It was completed in time for the unfortunately named ".NET 3.5 Service Pack 1", which was more like a major release than a service pack.

...

Developers do not like [ADO.NET Entity Framework] because of the complexity.

...

as of .NET 4.0, LINQ to Entities will be the recommended data access solution for LINQ to relational scenarios.

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

BlueRaja - Danny Pflughoeft 23.04.2010 01:10

МНОЖЕСТВО крупных сайтов электронной коммерции используют LINQ to SQL. Примеры: Redbox, Stackoverflow и т. д.

PositiveGuy 22.12.2010 07:30

Я знаю МНОГО хороших разработчиков, которые используют LINQ to SQL, и говорят, что эти статьи полностью преувеличены. Я согласен. LINQ to SQL использовался и до сих пор используется в мощных доменах .com.

PositiveGuy 29.12.2010 07:16

Да, вызов .ToString () для целочисленного свойства в запросе L2EF не должен вызывать исключения.

StingyJack 12.03.2011 00:43

ИМХО, если вы полагаясь в дизайнере, тогда вы настраиваете себя на проблемы позже, я использую только дизайнеров для быстрой настройки и поддерживаю код там после того, как я использовал дизайнеры, но всегда сталкивался с ограничениями и перешел к лучшим вещам, таким как использование фреймворки code first для сопоставления существующих баз данных с кодом и использования мощных инструментов ef для быстрой настройки

Chris McGrath 09.05.2012 17:45

@ BlueRaja-DannyPflughoeft Это все еще правда спустя более 5 лет?

Vikas Rana 01.12.2015 15:33

@VikasRana дизайнер все равно укусит вас за задницу, если у вас есть конфликт слияния с файлами .edmx даже в 2016 году, вместо этого используйте Code First

Dan 04.08.2016 16:12

Еще 5 лет, интересно, так ли это до сих пор? Я имею в виду, что если я знаю SQL и LINQ, почему я просто не могу этого сделать? Стоит ли тратить время на изучение EF для большого проекта?

user4779 23.06.2020 12:19

Ха ... Итак, я был там (вроде), когда началось все обсуждение LINQ vs Entity Framework ... Мои воспоминания отличаются от воспоминаний Мэтта Уоррена. Между людьми из команды C#, управляющей LINQ, и командой SQL, управляющей фреймворком сущностей, возник явный конфликт. Были разные сообщения в блогах от разных людей, утверждающих, что это «будущее технологий доступа к данным». Это привело к тому, что 2 технических парня ударились головами. В результате этого компромиссом стал Linq to Entity Framework. В любом случае, люди из LINQ в то время ... не думали, что они «никогда не должны были существовать».

Scott Wisniewski 31.07.2020 13:03

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

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

Вы упускаете суть - даже с небольшими базами данных вам может потребоваться нечто иное, чем отношение 1: 1 между таблицами базы данных и объектами кода / домена. Просто зависит от того, сколько абстракции вы хотите в объектах шины / домена.

alchemical 12.02.2010 01:52

Я это понял :) Сегодня я люблю вручную кодировать свои бизнес-сущности. Я все еще использую Linq2sql, но только в своих репозиториях, где я получаю данные с помощью Linq2sql и конвертирую сущности linq2sql в свои собственные бизнес-объекты. Может быть, немного больше работы, чем использование or-mapper, но все же мне нравится, чтобы мой бизнес-уровень был свободен от какого-либо кода, специфичного для OR-mapper.

terjetyl 12.02.2010 13:07

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

Отсутствие поддержки POCO - это причина номер один, по которой я предпочитаю LINQ to SQL Entity Framework. Я могу вернуться к EF, когда они включат его в следующую версию, поскольку они обещают это сделать. Есть несколько дополнительных проектов, которые выполняют POCO для EF, но недостаточно чисто.

Joseph Ferris 14.03.2009 20:30

Если кто-то (например, я) не знает, что означает POCO: Обычный старый объект CLR

CBono 24.09.2010 19:16

Я действительно не понимаю, в чем большая суета по поводу отказа от поддержки POCO ... это еще один уровень абстракции, ребята. Создайте фабрику, внедрив репозиторий данных и постройте там свои POCO. В любом случае, это, наверное, хорошая идея.

EightyOne Unite 12.10.2010 18:42

Я слышал, что POCO возможен в EF 4

PositiveGuy 30.12.2010 08:24

Также я до сих пор не имею представления о хорошем примере объекта POCO. Страница Wiki бесполезна с точки зрения описания в реальных терминах и примерах, что POCO фактически используется в реальном приложении ... отсутствие примеров не означает для меня никакой помощи.

PositiveGuy 30.12.2010 08:26

Поддержка POCO доступна в наши дни, и наследование больше не является требованием для классов сущностей @CoffeeAddict POCO - это просто простой объект, не зависящий от конкретной структуры, и это основная часть современных шаблонов структуры сущностей.

Chris McGrath 09.05.2012 17:51

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

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

"Нет Странных вещей посередине", хорошо, что ВЫ имеете в виду под этим. Пример «странной вещи посередине»

PositiveGuy 30.12.2010 08:29

Было бы неплохо отредактировать или удалить этот ответ, он больше не полезен для современной разработки и может сбить людей с пути.

Giulio Caccin 29.09.2019 22:26

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

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

Типы пространственных данных SQL Server 2008 (Open Geospatial Consortium OGS) поддерживаются начиная с Entity Framework 5. Также поддерживаются другие поставщики (Devart для Oracle). См. msdn.microsoft.com/en-us/data/dn194325.

subsci 11.09.2013 11:20

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

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

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

The basic rule of thumb for which framework to use is how to plan on editing your data in your presentation layer.

  • Linq-To-Sql - use this framework if you plan on editing a one-to-one relationship of your data in your presentation layer. Meaning you don't plan on combining data from more than one table in any one view or page.

  • Entity Framework - use this framework if you plan on combining data from more than one table in your view or page. To make this clearer, the above terms are specific to data that will be manipulated in your view or page, not just displayed. This is important to understand.

With the Entity Framework you are able to "merge" tabled data together to present to the presentation layer in an editable form, and then when that form is submitted, EF will know how to update ALL the data from the various tables.

There are probably more accurate reasons to choose EF over L2S, but this would probably be the easiest one to understand. L2S does not have the capability to merge data for view presentation.

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

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

LINQ to SQL

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

Entity Framework

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

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

Это самый актуальный и подробный ответ.

ErTR 16.03.2016 04:36

Разве Entity Framework использовать LINQ to SQL не работает, когда, скажем, вы пишете dbSet<Orders>.Where()...ToList()? Я думаю, что это заблуждение, когда Entity Framework противопоставляется LINQ to SQL.

Don Cheadle 07.06.2016 22:13

@mmcrae EF не поддерживает использовать L2S, оба являются поставщиками linq для базовых данных. Если вы интерпретируете его как Linq-to-a-database, похожий на linq-to-objects и linq-to-xml, то да, оба похожи в linq-to-a-database. Но нет, EF не использует L2S (или наоборот). Два полностью разделенных инструмента.

Maarten 14.06.2016 15:06

«Рекомендуется для всех новых проектов, кроме ... небольших» Я не согласен. Code First - это чрезвычайно быстрый способ начать работу с небольшими проектами. Кроме этого, отличное обновление этого вопроса.

DrewJordan 21.06.2016 18:12

Как определить, что проект «маленький» или «большой»?

Luke 15.07.2020 14:53

Здесь вы можете найти хорошее сравнение:

http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Difference-between-LINQ-to-SQL-and-Entity-Framework.html

http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1

Некоторые вещи в ответе неверны. EDMX не требуется, если вы используете Code First. И я не понимаю, как DI вступает в игру, когда вы используете Code First.

Maarten 14.06.2016 15:10

Кроме того, Linq to SQL может отлично заполнять БД из классов модели. Не уверен, что он также может генерировать саму БД, но создание схемы и таблиц входит в возможности Linq to SQL.

Tom Lint 01.07.2016 15:25

Спасибо за ответ, я думаю, что можно использовать sqlmetal.exedocs.microsoft.com/en-us/dotnet/framework/tools/… для генерации кода / отображения из базы данных при использовании Linq to SQL

Vinod Srivastav 19.04.2019 15:11

Linq-to-SQL

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

Linq-to-Entities

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

According to my personal experience Ef is better (if you have no idea about SQL) performance in LINQ is little bit faster as compare to EF reason LINQ language written in lambda.

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

Вот несколько показателей, ребята ... (КОЛИЧЕСТВЕННОЕ ОПРЕДЕЛЕНИЕ !!!!)

Я взял этот запрос, где использовал Entity Framework

var result = (from metattachType in _dbContext.METATTACH_TYPE
                join lineItemMetattachType in _dbContext.LINE_ITEM_METATTACH_TYPE on metattachType.ID equals lineItemMetattachType.METATTACH_TYPE_ID
                where (lineItemMetattachType.LINE_ITEM_ID == lineItemId && lineItemMetattachType.IS_DELETED == false
                && metattachType.IS_DELETED == false)
                select new MetattachTypeDto()
                {
                    Id = metattachType.ID,
                    Name = metattachType.NAME
                }).ToList();

и изменил его на то, где я использую шаблон репозитория Linq

            return await _attachmentTypeRepository.GetAll().Where(x => !x.IsDeleted)
                .Join(_lineItemAttachmentTypeRepository.GetAll().Where(x => x.LineItemId == lineItemId && !x.IsDeleted),
                attachmentType => attachmentType.Id,
                lineItemAttachmentType => lineItemAttachmentType.MetattachTypeId,
                (attachmentType, lineItemAttachmentType) => new AttachmentTypeDto
                {
                    Id = attachmentType.Id,
                    Name = attachmentType.Name
                }).ToListAsync().ConfigureAwait(false);

Linq-to-sql

            return (from attachmentType in _attachmentTypeRepository.GetAll()
                    join lineItemAttachmentType in _lineItemAttachmentTypeRepository.GetAll() on attachmentType.Id equals lineItemAttachmentType.MetattachTypeId
                    where (lineItemAttachmentType.LineItemId == lineItemId && !lineItemAttachmentType.IsDeleted && !attachmentType.IsDeleted)
                    select new AttachmentTypeDto()
                    {
                        Id = attachmentType.Id,
                        Name = attachmentType.Name
                    }).ToList();

Также знайте, что Linq-to-Sql в 14 раз быстрее, чем Linq ...

Другие вопросы по теме