В чем разница между "LINQ to Entities", "LINQ to SQL" и " LINQ to Dataset"
Я уже довольно давно работаю с LINQ. Тем не менее, остается немного загадкой, каковы реальные различия между упомянутыми ароматами LINQ.
успешный ответ будет содержать короткую дифференциацию между ними. Какова основная цель каждого аромата, в чем заключается польза, и есть ли влияние на производительность...
С. П.
Я знаю, что есть много источников информации там, но я ищу своего рода "чит лист", который инструктирует новичка, куда направиться для достижения конкретной цели.
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>в объект-представление выражения (aLambdaExpression<...>) он может растянуть его и применить его к любому примеру" 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