Опубликован: 27.12.2011 | Уровень: специалист | Доступ: платный
Лекция 7:

Использование источников данных в приложениях LightSwitch 2011

Аннотация: Рассмотрены вопросы использования различных источников данных в приложениях LightSwitch. Описаны механизмы настройки подключения к источникам данных. Подробно описаны типы запросов их функциональное назначение и способы их создания с использованием встроенных в LightSwitch редакторов.

Цель лекции: изучить механизм подключения к источникам данных и принципы создания различных типов запросов к данным в приложениях LightSwitch.

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

Приоритетным источником данных является Microsoft SOL Server, но внешние источники данных не ограничиваются только им. В стандартных настройках можно использовать SharePoint списки, WCF RIA Service, а в дальнейшем обещают появление сторонних провайдеров для других источников данных.

Как уже указывалось, приложения LightSwitch, имеют трехуровневую архитектуру. На уровне пользовательского интерфейса приоритетом является обеспечение эффективного взаимодействия с пользователем. Данные поставляет уровень бизнес-логики с помощью специальных сервисов данных, первичная работа данных сервисов заключается в чтении данных из хранилища, а затем, по запросу пользователя, контроль их корректности и сохранение в хранилище ( рис. 11.1).

Трехуровневая структура приложения

Рис. 11.1. Трехуровневая структура приложения

В таблице 11.1 систематизированы возможные источники данных LightSwitch.

Таблица 11.1. Источники данных LightSwitch
Служба доступа к данным Провайдер данных Поддерживаемые функции Не поддерживаемые функции
Microsoft SQL Server

SQL Server 2005

SQL Server 2008

SQL Server 2008 R2

Sql Client for the Entity Framework Ссылочная целостность

Транзакции

Аутентификация SQL

Интегрированная аутентификация Windows

SQL Server Compact

Хранимые процедуры

Microsoft SQL Azure Sql Client for the Entity Framework Ссылочная целостность

Транзакции

Аутентификация SQL

Хранимые процедуры

Интегрированная аутентификация Windows

Аутентификация Azure Federated

Microsoft SharePoint

SharePoint 2010

OData client Data Service Context Списки

Отношения между таблицами

Транзакции
Other (RIA) Требует создания WCF RIA Domain Service Транзакции

Запросы с параметрами

Сборные типы

Включенные запросы

При создании нового источника данных, например, если в проект добавляется таблица или выполняется подключение к внешнему источнику данных, LightSwitch автоматически создает необходимую промежуточную службу данных и конфигурирует провайдер данных. Для внутренних данных создается специальный источник данных, называемый ApplicationData. Для других источников имя определяется именем исходного источника данных.

LightSwitch обладает собственной моделью данных, которая основана на CLR, но имеет ряд особенностей и их необходимо учитывать в ходе разработки приложений ( таблица 11.2).

Таблица 11.2. Типы данных LightSwitch
LightSwitch тип данных VB тип данных C# тип данных Диапазон
Binary Byte() byte[] от 0 до 255
Boolean Boolean bool True или False
Byte Byte byte 0 до 255
Date Date DateTime Январь 1, 0001 AD (CE) to Декабрь 31, 9999 AD (CE)
DateTime Date DateTime 00:00:00 Январь 1, 0001 AD (CE) to 23:59:59 Декабрь 31, 9999 AD (CE)
Decimal Decimal decimal ±1.0e-28 до ±7.9e28
Double Double double ±5.0e-324 до ±1.7e308
EmailAddress String string
Guid Guid Guid {00000000-0000-0000-0000-000000000000} до {FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}
Image Byte() byte[]
Int16 Short short -32,768 до 32,767
Int32 Integer int -2,147,483,648 до 2,147,483,647
Int64 Long long -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
Money Decimal decimal
PhoneNumber String string
SByte SByte sbyte -128 to 127
Single Single float ±1.5e-45 to ±3.4e38
String String string A sequence of zero or more Unicode characters (последовательность из 0 или более символов Unicode)
TimeSpan TimeSpan TimeSpan ±10675199.02:48:05.4775807

Ряд типов LightSwitch (Date, Email Address) относятся к семантическим типам. Они не являются особыми типами, но поддерживают специальное форматирование, отображение и проверку правильности.

Все простые и семантические типы поддерживают пустое значение Null. Эти типы данных представлены в обычных языках программирования как datatype? (со знаком вопроса в конце). В коде LightSwitch использует запись для таких типов данных как и в языках VB и С#, например, Integer? или Int?.

Наиболее часто используется в качестве источника данных SQL server, в том числе и внутренние данные также хранятся в SQL Server Express. Для доступа к данным SQL server используется SQL Client for Entity Framework провайдер. Аналогичный провайдер используется и для доступа к SQL Azure. При этом для подключения используется стандартная строка подключения.

LightSwitch не поддерживает использования хранимых процедур SQL Server. Также игнорируются все, кроме таблиц, объекты базы данных, такие как триггеры, пользовательские типы. При необходимости доступ и к хранимым процедурам и к другим объектам можно получить, если реализовать и использовать для получения данных LightSwitch службы WCF RIA Domain Service.

В ходе разработки следует учитывать, что ряд типов данных SQL Server не соответствует типам LightSwitch и при их использовании происходит их преобразование. Подробнее об этом в случае необходимости можно узнать из справочной системы.

Как уже указывалось, для внутренних нужд LightSwitch может использовать источник данных ApplicationData. В базе данных этого источника сохраняются элементы данных, определенные внутри приложения, в противоположность данным, экспортированным из внешних источников. В режиме разработки эта база данных охраняется на установленном со средой LightSwitch Microsoft SQL Server Express. В рабочем режиме эта база данных может быть развернута на полноценном сервере Microsoft SQL Server или SQL Azure. Следует помнить, что при развертывании происходит перенос только схемы базы данных, перенос сохраненных во время разработки приложения данных требует специальных действий.

В ходе разработки базы данных LightSwitch определяет модель данных и связи между ними. На основе этой модели генерируется схема данных, которая может быть использована для создания таблиц и отношений.

Следует учитывать, что ряд типов базы данных SQL Server, таких, как Byte, SByte, Single и TimeSpan не поддерживаются в LightSwitch. Свойство Обязательно дизайнера сущностей преобразуется в Not Null свойство базы данных. Дизайнер LightSwitch поддерживает первичные и внешние ключи, для каждой новой таблицы автоматически создается первичный ключ с именем ID типа Int32, для связанных таблиц создаются скрытые внешние ключи в отношении 1:1 или 1:?. Связи приносятся в базу данных с созданием соответствующих ограничений внешнего ключа.

Интересной особенностью LightSwitch является возможность изменения структуры базы данных после ее публикации, при этом переносятся только изменения, произошедшие в базе с момента ее последней публикации.

Для поддержки аутентификации Windows или аутентификации на основе форм LightSwitch поддерживает необходимые для хранения пользователей и ролей таблицы.

Эти таблицы входят во внутреннюю базу данных, при этом поддерживается ASP.Net SQL Membership provider. Также LightSwitch поддерживает концепцию разрешения для ролей. Разрешения определяют, какие права и для каких объектов имеет определенная роль. После развертывания пользователь Администратор имеет возможность управлять разрешениями, группами и пользователями.

У нового проекта исходно имеется один источник данных ApplicationData, который представляет внутренний источник данных. Если базы еще данных нет, то она может быть последовательно создана в конструкторе LightSwitch во внутреннем источнике данных.

Денис Кобзов
Денис Кобзов
Россия, Ноябрьск
Szonja Balint
Szonja Balint
Соединенные Штаты, Los Angeles