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


LINQ и ADO.NET

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

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

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

Существует три отдельных технологии ADO.NET интегрированных с языком запросов (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.

LINQ to ADO.NET overview

Дополнительные сведения о 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.

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

См. также