Поделиться через


LINQ и ADO.NET

Сегодня многие бизнес-разработчики должны использовать два (или более) языка программирования: высокоуровневый язык для бизнес-логики и уровней презентации (например, Visual C# или Visual Basic), а также язык запросов для взаимодействия с базой данных (например, Transact-SQL). Это требует, чтобы разработчик был опытным на нескольких языках, а также вызывает несоответствия языка в среде разработки. Например, приложение, использующее API доступа к данным для выполнения запроса к базе данных, указывает запрос как строковый литерал с помощью кавычки. Эта строка запроса недоступна для компилятора и не проверяется на наличие ошибок, таких как недопустимый синтаксис или наличие столбцов или строк, на которые он ссылается. Нет проверки типов параметров запроса и нет IntelliSense поддержки.

Language-Integrated запрос (LINQ) позволяет разработчикам создавать запросы на основе набора в коде приложения, не используя отдельный язык запросов. Запросы LINQ можно записывать в различные перечислимые источники данных (т. е. источник данных, реализующий IEnumerable интерфейс), такие как структуры данных в памяти, XML-документы, базы данных SQL и DataSet объекты. Хотя эти перечислимые источники данных реализуются различными способами, все они предоставляют одинаковые синтаксис и конструкции языка. Так как запросы могут быть сформированы на самом языке программирования, вам не нужно использовать другой язык запросов, внедренный как строковые литералы, которые не могут быть поняты или проверены компилятором. Интеграция запросов на язык программирования также позволяет программистам Visual Studio повысить производительность, предоставляя тип времени компиляции и проверку синтаксиса, а IntelliSenseтакже . Эти функции снижают потребность в отладке запросов и исправлении ошибок.

Передача данных из таблиц SQL в объекты в памяти часто мучает и подвержена ошибкам. Поставщик LINQ, реализованный LINQ to DataSet и LINQ to SQL, преобразует исходные данные в IEnumerableколлекции объектов на основе. Программист всегда просматривает данные как коллекцию IEnumerable , так и при выполнении запроса и при обновлении. Полная IntelliSense поддержка предоставляется для написания запросов к этим коллекциям.

Существует три отдельных технологии ADO.NET Language-Integrated запросов (LINQ): LINQ to DataSet, LINQ to SQL и LINQ to Entities. LINQ to DataSet обеспечивает более широкий, оптимизированный запрос поверх DataSet и LINQ to SQL, позволяет напрямую запрашивать схемы баз данных SQL Server, а LINQ to Entities позволяет запрашивать модель данных сущностей.

На следующей схеме представлен обзор того, как ADO.NET технологии LINQ связаны с высокоуровневым языками программирования и источниками данных с поддержкой LINQ.

DPUE_LinqToAdoNetOverview_bpuedev11

Дополнительные сведения о LINQ см. в разделе "Интегрированный язык" (LINQ).

В следующих разделах содержатся дополнительные сведения о LINQ to DataSet, LINQ to SQL и LINQ to Entities.

LINQ to DataSet

Это DataSet — ключевой элемент автономной модели программирования, на которой построен ADO.NET, и широко используемый. LINQ to DataSet позволяет разработчикам создавать более широкие возможности DataSet запросов с помощью того же механизма формулировки запросов, который доступен для многих других источников данных. Дополнительные сведения см. в разделе LINQ to DataSet.

LINQ to SQL

LINQ to SQL — это полезное средство для разработчиков, которые не требуют сопоставления с концептуальной моделью. С помощью LINQ to SQL можно использовать модель программирования LINQ непосредственно по существующей схеме базы данных. LINQ to SQL позволяет разработчикам создавать классы .NET Framework, представляющие данные. Вместо сопоставления с концептуальной моделью данных эти созданные классы сопоставляются непосредственно с таблицами базы данных, представлениями, хранимыми процедурами и пользовательскими функциями.

С помощью LINQ to SQL разработчики могут писать код непосредственно по схеме хранилища, используя тот же шаблон программирования LINQ, как и для коллекций в памяти, а также DataSet других источников данных, таких как XML. Дополнительные сведения см. в разделе LINQ to SQL.

LINQ to Entities

Большинство приложений в настоящее время записываются на основе реляционных баз данных. В какой-то момент эти приложения должны взаимодействовать с данными, представленными в реляционной форме. Схемы баз данных не всегда идеально подходят для создания приложений, а концептуальные модели приложения не совпадают с логическими моделями баз данных. Модель данных сущности — это концептуальная модель данных, которая может использоваться для моделирования данных определенного домена, чтобы приложения могли взаимодействовать с данными в качестве объектов. Дополнительные сведения см. в разделе ADO.NET Entity Framework.

С помощью модели данных сущности реляционные данные предоставляются в виде объектов в среде .NET. Это делает слой объектов идеальным целевым объектом для поддержки LINQ, что позволяет разработчикам сформулировать запросы к базе данных на языке, используемом для создания бизнес-логики. Эта возможность называется LINQ to Entities. Дополнительные сведения см. в разделе LINQ to Entities.

См. также