Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Запросы linQtoSql

Запросы LINQ to SQL определяются с помощью синтаксиса, используемого в LINQ. Единственное отличие заключается в том, что объекты, на которые ссылаются запросы, сопоставляются с элементами базы данных. Дополнительные сведения см. в разделе Введение в запросы LINQ.

Технология LINQ to SQL преобразует написанные пользователем запросы в эквивалентные запросы SQL и отправляет их на сервер для обработки. В частности, приложение использует API-интерфейс LINQ to SQL, чтобы запросить выполнение запроса. Затем поставщик LINQ to SQL преобразует запрос в текст SQL и делегирует выполнение поставщику ADO. Поставщик ADO возвращает результаты запроса в виде объекта DataReader. Поставщик LINQ to SQL преобразует результаты ADO в коллекциюIQueryableпользовательских объектов.

На следующем рисунке показана общая схема процесса.

Схема выполнения запроса

Примечание.

Для большинства методов и операторов, основанных на встроенных типах .NET Framework, предусмотрены непосредственные преобразования в команды SQL. Те методы и операторы, которые не могут быть преобразованы технологией LINQ, вызывают исключения во время выполнения. Дополнительные сведения см. в разделе Сопоставление типов SQL и CLR (LINQ to SQL).

В следующей таблице показано сходство и различие между элементами запросов LINQ и LINQ to SQL.

Элемент

Запрос LINQ

Запрос LINQ to SQL

Тип возвращаемых данных для локальной переменной, содержащей запрос (для запросов, которые возвращают последовательности)

Универсальный интерфейс IEnumerable

Универсальный интерфейс IQueryable

Указание источника данных

Используется предложение From (Visual Basic) или from (C#)

То же

Фильтрация

Использует предложение Where/where

То же

Группировка

Использует предложение Group…By/groupby

То же

Выбор (проецирование)

Используется предложение Select/select

То же

Отложенное или немедленное выполнение

См. раздел Введение в запросы LINQ.

То же

Реализация соединений

Используется предложение Join/join

Можно использовать предложение Join/join, однако более эффективно использовать атрибут AssociationAttribute. Дополнительные сведения см. в разделеВыполнение запросов в связях (LINQ to SQL).

Удаленное или локальное выполнение

Дополнительные сведения см. в разделе Сравнение удаленного и локального выполнения запросов (LINQ to SQL).

Потоковое или кэшированное выполнение запросов

Не применяется при использовании локальной памяти

См. также

Основные понятия

Введение в запросы LINQ

Основные операции запроса (LINQ)

Связи типов в операциях запроса (LINQ)

Другие ресурсы

Основные понятия о запросах в LINQ to SQL

LINQ to Entities

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

Примечание о безопасности.

При использовании команд для обработки данных со свойством CommandType, равнымText, внимательно проверьте сведения, которые отправляются клиентом, перед передачей их базе данных. Злоумышленники могут попытаться отправить (вставить) измененные или дополнительные инструкции SQL в целях получения несанкционированного доступа к базе данных или ее повреждения. Прежде чем передавать пользовательский ввод в базу данных, необходимо всегда проверять допустимость данных. Рекомендуется по возможности использовать запросы с параметрами и хранимые процедуры.

Непосредственное выполнение операций над базой данных имеет определенные преимущества, в том числе:

  • Дополнительные функциональные возможности.   Как уже упоминалось, некоторые операции, например выполнение команд DDL, можно выполнить только с помощью команд обработки данных.

  • Больший контроль над выполнением.   При использовании команд (а также средства чтения данных, если происходит считывание данных) разработчик получает более прямой контроль над тем, как и когда выполняются инструкции SQL или хранимая процедура и что происходит с результатами или возвращаемыми значениями.

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

  • Снижение трудоемкости программирования в ряде случаев.   В некоторых случаях, в частности, при работе с веб-приложениями, для сохранения состояния набора данных требуется дополнительное программирование. Например, страницы Web Forms всякий раз создаются заново в каждом цикле обработки, и, если не запрограммировать сохранение и восстановление набора данных, он тоже будет удаляться и создаваться вновь в каждом цикле обработки. При использовании средства чтения данных для чтения непосредственно из базы данных можно отказаться от дополнительных этапов, необходимых для управления набором данных.

LINQ to DataSet