LINQPad позволяет писать запросы на LINQ и проверять результаты выполнения на реальных данных без особых хлопот. В качестве бонуса LINQPad позволяет быстро увидеть SQL-запрос, который уходит в базу при использовании LINQ в реальных условиях.
Для Flexberry DataService написан специальный провайдер, который сильно упрощает работу в LINQPad с нашими проектами.
Установка LINQPad и подключение к рабочей базе
Установить LINQPad и провайдер с официального сайта.
- Файл
LINQPad4.zip
илиLINQPad4-AnyCPU.zip
(для 64-разрядного процессора). - Файл драйвера, поддерживающего Flexberry DataService:
SQLDataServiceLinqPadDriver.lpx
- Распаковывать архив в удобное место и положить рядом провайдер.
- Запустить
LINQPad.exe
- В открывшемся окне нажать
Add connection
- В следующем открывшемся окне нажать
View more drivers...
- Нажать
Browse...
и указать путь к файлу с провайдером (SQLDataServiceLinqPadDriver.lpx
). - В окне
Choose Data Context
выбратьFlexberry SQLDataService
и нажатьNext >
- В появившемся окне указать путь к сборке с объектами данных, а также к файлу конфигураци приложения (из него используется строка соединения с базой данных). После нажатия кнопки
OK
новое подключение появится в главном окне программы в списке подключений.
Примечание: у пользователей ОС Windows XP в этом месте программа может быть выдана критическая ошибка. Следует перезапустить программу, соединение будет добавлено.
Использование LINQPad
Добавленное подключение можно развернуть, чтобы увидеть список классов. Каждый класс также можно развернуть, чтобы увидеть список полей и представлений (представления показываются из внутреннего класса Views объекта данных).
Чтобы написать запрос, необходимо вызвать контекстное меню подключения и выбрать пункт меню New Query
В окне справа написать запрос вида
from k in Кредит
select k
выбрав C# Expression
из выпадающего списка Language
.
Однако, ввиду некоторых проблем при использовании динамических представлений, рекомендуется использовать запросы вида
ds.Query<IIS.Кредиты.Кредит>(IIS.Кредиты.Кредит.Views.КредитE).Dump();
с явным указанием представления, по которому вычитываются данные.
Примечание 1: необходимо выбрать C# Statement(s)
из выпадающего списка Language
Примечание 2: Dump() в конце обязателен для написания, без него просто сконструируется запрос, но в базу не уйдет и результатов не предоставит.
Здесь ds
- это константа драйвера, указывающая на инстанцию сервиса данных для упрощения написания запросов.
Чтобы определить пространство имен класса достаточно навести на него в дереве слева, вылезет подсказка с указанием полного имени класса.
Запрос с указанием ограничений будет выглядеть как обычный запрос с использованием LINQProvider:
ds.Query<IIS.Кредиты.Кредит>(IIS.Кредиты.Кредит.Views.КредитE).Where(k => k.СуммаКредита >= 100000).Dump();
Контекст исполнения запросов
Текст запроса, который пишется в редакторе фактически вставляется в динамически компилируемый класс - контекст данных. Запрос является одним из методов этого контекста. К данному контексту подключены using-и для всех неймспейсов, которые имеются у классов объектов данных из сборки. Также к компилируемому контексту подключается ряд сборок из Flexberry необходимых для работы LINQProvider. Эти сборки сначала ищутся в каталоге со сборкой объектов данных, если их там нет, то берутся сборки из драйвера. Кроме этого, автоматически добавляются ссылки на сборки, от которых зависит сборка объектов данных и которые располагаются в том же каталоге.
Ещё одна важная деталь: в конструкторе контекста данных выполняется метод для отключения проверки полномочий т.к. авторизация недоступна.
ICSSoft.STORMNET.RightManager.DisableAllRightChecks();
Добавление ссылок на дополнительные сборки с объектами
Если есть необходимость использовать несколько файлов со сборками объектов, то можно добавить их следующим образом:
- Вызвать
контекстное меню
в поле ввода запроса и выбратьQuery Properties...
- На вкладке
Additional References
указать пути к дополнительным сборкам объектов - На вкладке
Additional Namespace Imports
указать необходимые пространства имен (можно выбрать из добавленных сборок).
Вывод результатов
По умолчанию результаты выводятся в интересном, но неудобочитаемом виде. Чтобы переключить на табличный метод вывода достаточно нажать на кнопку в верхней части области построения запросов.
Примечание: автоматического переключения формата вывода уже выполненного запроса при этом не произойдет, необходимо выполнить запрос еще раз.
SQL
В качестве приятного бонуса предоставляется возможность просмотра формируемого при запросе SQL-выражения.
Чтобы просмотреть SQL-выражение достаточно перейти на вкладку SQL области результатов выполнения запроса. Если в базу идёт несколько запросов, например, если в представлении участвуют детейлы, то на вкладке покажутся все запросы, разделённые пустой строкой.