В чем разница между "LINQ to Entities", "LINQ to SQL" и " LINQ to Dataset"



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



успешный ответ будет содержать короткую дифференциацию между ними. Какова основная цель каждого аромата, в чем заключается польза, и есть ли влияние на производительность...



С. П.
Я знаю, что есть много источников информации там, но я ищу своего рода "чит лист", который инструктирует новичка, куда направиться для достижения конкретной цели.

915   3  

3 ответов:

  • все они являются интегрированным запросом LINQ-Language-поэтому все они имеют много общего. Все эти "диалекты" в основном позволяют делать запрос в стиле выбора данных, из различных источников.

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

  • Linq-to-Entities это та же идея, но с использованием Entity Framework в фоновом режиме, что и ORM - снова от Microsoft, но с поддержкой нескольких бэкэндов базы данных

  • Linq-to-DataSets это LINQ, но использование против "старого стиля" ADO.NET 2.0 DataSets - во времена до ORM от Microsoft, все, что вы могли бы сделать ADO.NET возвращал наборы данных, таблицы данных и т. д., и Linq-to-DataSets запрашивает эти данные магазины для хранения данных. Поэтому в этом случае вы возвращаете DataTable или DataSets (System.Пространство имен данных) из бэкэнда базы данных, а затем запросить те, которые используют синтаксис LINQ

LINQ-это широкий набор технологий, основанный на (например) синтаксисе понимания запросов, например:

var qry = from x in source.Foo
          where x.SomeProp == "abc"
          select x.Bar;

который отображается компилятором в код:

var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);

и здесь реальные магия начинается. Обратите внимание, что мы не сказали, что Foo здесь-и компилятору все равно! Пока он может решить некоторые соответствующий метод называется Where это может принять лямбда, и результат этого имеет некоторыеSelect метод, который может принять лямбда, он счастлив.

теперь рассмотрим, что лямбда может быть скомпилирована или в анонимный метод (делегат, для LINQ-to-Objects, который включает LINQ-to-DataSet),или к дереву выражений (модель времени выполнения, представляющая лямбду в объектной модели).

для данных в оперативной памяти (обычно IEnumerable<T>), он просто выполняет делегат - хорошо и быстро. Но для IQueryable<T> в объект-представление выражения (a LambdaExpression<...>) он может растянуть его и применить его к любому примеру" LINQ-to-Something".

для баз данных (LINQ-to-SQL, LINQ-to-Entities) это может означать написание TSQL, например:

SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1

но это может (для ADO.NET службы данных, например) означают написание HTTP-запроса.

выполнение хорошо написанного запроса TSQL, который возвращает небольшой объем данных, выполняется быстрее, чем загрузка всей базы данных по сети, а затем фильтрация на клиенте. Однако у обоих есть идеальные сценарии и простые неправильные сценарии.

LINQ, которая выделяется для интегрированного языка запросов. Он позволяет использовать язык запросов" SQL style " непосредственно в C# для извлечения информации из источников данных.

  • этот источник данных может быть базой данных SQL server-это Linq to SQL
  • этот источник данных может быть контекстом данных объектов Entity framework -Linq to entities.
  • этот источник данных может быть ADO.net наборы данных - Linq to Dataset.

этот источник данных также может быть XML-файлом -Linq to XML.
Или даже просто класс коллекции простых объектов - Linq to Objects.

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

для немного дополнительного фона:

наборы являются ADO.net объекты, где данные загружаются из базы данных в набор данных .net и Linq может использоваться для запроса этих данных после их загрузки.

с Linq to SQL вы определяете классы .net, которые сопоставляются с базой данных, а Linq-to-SQL заботится о загрузке данных из базы данных SQL server

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

Comments

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