Разработка облачных бизнес-приложений с использованием Visual Studio LightSwitch 2011

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

Разбить на страницы
Показывать лекцию целиком

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

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

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

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

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

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

Источники данных 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 AzureSql 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).

Типы данных LightSwitch
LightSwitch тип данныхVB тип данныхC# тип данныхДиапазон
BinaryByte()byte[]от 0 до 255
BooleanBooleanboolTrue или False
ByteBytebyte0 до 255
DateDateDateTimeЯнварь 1, 0001 AD (CE) to Декабрь 31, 9999 AD (CE)
DateTimeDateDateTime00:00:00 Январь 1, 0001 AD (CE) to 23:59:59 Декабрь 31, 9999 AD (CE)
DecimalDecimaldecimal±1.0e-28 до ±7.9e28
DoubleDoubledouble±5.0e-324 до ±1.7e308
GuidGuidGuid{00000000-0000-0000-0000-000000000000} до {FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}
Int16Shortshort-32,768 до 32,767
Int32Integerint-2,147,483,648 до 2,147,483,647
Int64Longlong-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
SByteSBytesbyte-128 to 127
SingleSinglefloat±1.5e-45 to ±3.4e38
StringStringstringA sequence of zero or more Unicode characters (последовательность из 0 или более символов Unicode)
TimeSpanTimeSpanTimeSpan±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 во внутреннем источнике данных.

Для этого необходимо правым щелчком мыши по ).

(рис 11.2) Создание новой таблицы

Автоматически в таблице создается ключевое поле ID, определяющее внутренний идентификатор каждой записи. Это поле будет использоваться как ключевое. Остальные поля необходимо дописать в таблице, выбрать их тип и для обязательных установить флажок Обязательно.

В панели свойств можно установить дополнительные характеристики для создаваемых полей (рис 11.3).

(рис 11.3) Свойства полей

Кнопка Список значений позволяет задать выпадающий список для выбора нужного значения.

Кнопка Настраиваемая проверка запускает редактор кода в котором можно определить условия правильности вводимым в поле значений и обеспечить возможность добавления только соответствующих значений.

В конструкторе таблиц в секции Добавить, можно выбрать:

  • Вычисляемое свойство
  • Отношение
  • Запрос
  • Экран
  • Вычисляемое свойство, это особый тип для таблиц LightSwitch, который динамически рассчитывается на основе других значений данной таблицы.

    (рис 11.4) Определение вычисляемого свойства

    Сам расчет вычисляемого значения выполняется в коде программы:

     partial void ФИОСтудента_Compute(ref string result)
            {
                // Присвоение результату значения нужного поля
           result = ФамилияСтудента + ' ' + ИмяСтудента + ' '  + ОтчествоСтудента;
            }
    

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

    Разработка базы данных подразумевает установление отношений между созданными таблицами. Для этого в LightSwitch используется специальное диалоговое окно (рис 11.5):

    (рис 11.5) Определение связей

    Это окно позволяет выбрать связываемые таблицы и тип связей между ними (отношение многие – ко – многим не поддерживается). Тут же устанавливается поведение при удалении, возможны два варианта:

  • Каскадное удаление – подразумевает автоматическое удаление записей из подчиненных таблиц при удалении связанной записи из главной таблицы;
  • Ограниченный доступ – при возникновении конфликтов связанных записей выводится предупреждение.
  • Большое внимание разработчики LightSwitch уделили механизмам отбора записей из источников данных. Ими были использованы лучшие наработки других Object Relation mapping (ORM) и реализован как концептуально эффективный, так интерфейсно удобный механизм создания запросов. В его основе лежат запросы двух видов:

  • уровня экрана;
  • уровня источников данных.
  • Запросы уровня экрана связывают через общие переменные различные элементы экрана, обеспечивая механизм стандартного просмотра Мастер - Подробности.

    Запрос уровня экрана строится на основе данных экрана, которые добавляются в момент создания экрана. Для создания запроса используется специальный дизайнер. Рассмотрим на примере создания такого типа запросов.

    Рядом с именем источника данных расположена кнопка редактор запроса, которая запускает специальный дизайнер запросов для данных экрана (рис 11.6).

    (рис 11.6) Создание фильтра для запроса

    В этом дизайнере можно создавать критерии фильтрации данных, а также определять способ сортировки. Критерии могут быть основаны на фиксированных значениях их достаточно просто указать. Более общий случай состоит в использовании параметров. Для создания параметра можно использовать раздел Параметры, где с помощью ссылки Добавить параметр. Обычное условие фильтрации состоит из следующих частей:

  • Приложение ГДЕ или ГДЕ НЕ.
  • Поля для фильтрации (можно выбрать из списка).
  • Оператор сравнения (выбирается из списка <=; =; >= и др.).
  • Опция параметра указывается знаком @ (другие элементы списка Литерал, Свойство и Параметр).
  • Имя параметра (при необходимости можно создать новый параметр).
  • После создания фильтра с параметром уровня экрана в конструкторе экрана необходимо создать переменную. В ней будет сохраняться значение параметра, и через нее будет осуществляться передача параметра в фильтр.

    Для создания переменной используется кнопка ).

    (рис 11.7) Создание локального свойства

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

    Затем необходимо связать переменную и свойство из фильтра. Для этого необходимо выделить параметр в списке данных экрана (слева от дерева экрана) и в окне ).

    (рис 11.8) Привязка параметра и переменной

    В списке данных экрана переменная и параметр станут связанными стрелочкой. Затем созданную переменную можно использовать в коде программы и ее значение будет передаваться в связанный с ней параметр (рис 11.10).

    (рис 11.9) Связь между параметром и переменной

    На основе описанного подхода можно реализовывать эффективный для баз данных интерфейс вида Мастер – Подробности, кода значения из главной таблицы выбираются из списка, а в подчиненных таблице с помощью таблицы данных отображаются только связанные с выбранным значением данные.

    Кроме того, локальная переменная имеет свойство Является параметром. Если установить это свойство, то можно добиться того, чтобы представляла собой глобальный параметр экрана, что позволит использовать ее из других экранов. Эта возможность может быть задействована, когда связанные таблицы располагаются на различных экранах. С использованием глобальной экранной переменной можно обеспечить фильтрацию в подчиненном экране в зависимости от значений, выбранных на главном экране.

    Другой тип запросов – запросы уровня сущности. Их можно отнести к глобальным, так как они носят общий для всего проекта характер и могут быть использованы различными экранами. Как и запросы уровня экрана, данный тип запросов может иметь критерии фильтрации и сортировки, а также обладать параметрами.

    Создать такой тип запросов можно двумя способами:

  • в инспекторе проекта выполнить щелчок правой кнопкой на сущности, для которой необходимо построить запрос и выбрав команду Добавить запрос в контекстном меню;
  • открыть сущность в Конструкторе Данных и нажать кнопку Запрос на панели инструментов конструктора.
  • Любой из способов приведет к запуску редактора запросов, аналогичного Запросам уровня экрана с такими же возможностями. После своего создания запросы уровня сущности будут отображаться в раскрывающемся списке под своей сущностью (рис 11.11).

    (рис 11.10) Создание запроса уровня сущности

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

    partial void ВсеЗаданныеОценкиGrid_InitializeDataWorkspace(List<IDataService> saveChangesTo)
            {
                // Добавьте сюда свой код.
                ОценкиЗаСеместрЗначениеОценки = "Отлично";
            }
    

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

    Для подключения внешнего источника данных необходимо вызвать команду ).

    (рис 11.11) Внешний источник данных

    Выбрав нужный тип источника можно переходить к его настройке. Для SQL Server это будет стандартное окно подключения к базе данных (рис 11.12).

    (рис 11.12) Подключение к базе данных

    Для других источников также выводятся специальные окна настройки подключения. Рассмотрим принципы использования других источников данных помимо SQL Server и SQL Server Azure.

    Наиболее универсальным провайдером данных является служба WCF RIA. Как было описано во второй лекции, WCF RIA обеспечивает единый механизм доступа к данным из приложений Silverlight. Это свойство можно использовать в случаях, когда данные находятся не в SQL Server или списках SharePoint, когда нет достаточных прав для подключения к SQL Server. WCF RIA обеспечивает обертку для данных из различных источников. Приложение LightSwitch получает данные и преобразует их в представление сущности.

    При этом, в ходе создания сервиса WCF RIA необходимо придерживаться определенных требований, в частности необходимо иметь не менее одного метода в классе Domain Service с атрибутом Query. WCF RIA службы будут полезны и в тех случаях, когда прямой доступ к базе данных из LightSwitch приложения запрещен политикой безопасности.

    Еще одним стандартным источником данных могут быть списки SharePoint. Microsoft ориентирует SharePoint как внутрикорпоративное хранилище информации и возможность получения информации из этого хранилища является важной функцией. Для подключения необходимо, чтобы на сервере была установлена версия SharePoint 2010 с установленными службами WCF RIA. Затем использование этого источника данных происходят стандартным образом. В мастере настроек после выбора Share Point как источника будут отображаться все элементы с сервера Share Point. Выбрав необходимые будет установлено подключение и в инспекторе проекта создана группа Данные Share Point. Полученные данные можно объединить с данными, хранимыми внутри приложения. Для этого между ними необходимо установить связи. Затем на основе данных можно создавать экраны и использовать их стандартным способом.

    Краткие итоги

  • Приоритетным источником данных является Microsoft SOL Server, но внешние источники данных не ограничиваются только им: также можно использовать SharePoint списки, WCF RIA Service.
  • LightSwitch обладает собственной моделью данных, которая основана на CLR, но имеет ряд особенностей и их необходимо учитывать в ходе разработки приложений.
  • Все простые и семантические типы поддерживают пустое значение Null.
  • Для внутренних нужд LightSwitch может использовать источник данных ApplicationData.
  • В панели свойств можно установить дополнительные характеристики для создаваемых полей.
  • Вычисляемое свойство – это особый тип для таблиц LightSwitch, который динамически рассчитывается на основе других значений данной таблицы.
  • Большое внимание разработчики LightSwitch уделили механизмам отбора записей из источников данных.
  • Запросы уровня сущности можно отнести к глобальным, так как они носят общий для всего проекта характер и могут быть использованы различными экранами.
  • Для подключения внешнего источника данных необходимо вызвать команду Добавить источник данных в инспекторе проекта.
  • Страницы:

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

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

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

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

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

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

    Источники данных 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 AzureSql 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).

    Типы данных LightSwitch
    LightSwitch тип данныхVB тип данныхC# тип данныхДиапазон
    BinaryByte()byte[]от 0 до 255
    BooleanBooleanboolTrue или False
    ByteBytebyte0 до 255
    DateDateDateTimeЯнварь 1, 0001 AD (CE) to Декабрь 31, 9999 AD (CE)
    DateTimeDateDateTime00:00:00 Январь 1, 0001 AD (CE) to 23:59:59 Декабрь 31, 9999 AD (CE)
    DecimalDecimaldecimal±1.0e-28 до ±7.9e28
    DoubleDoubledouble±5.0e-324 до ±1.7e308
    GuidGuidGuid{00000000-0000-0000-0000-000000000000} до {FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}
    Int16Shortshort-32,768 до 32,767
    Int32Integerint-2,147,483,648 до 2,147,483,647
    Int64Longlong-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
    SByteSBytesbyte-128 to 127
    SingleSinglefloat±1.5e-45 to ±3.4e38
    StringStringstringA sequence of zero or more Unicode characters (последовательность из 0 или более символов Unicode)
    TimeSpanTimeSpanTimeSpan±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 во внутреннем источнике данных.

    Для этого необходимо правым щелчком мыши по ).

    (рис 11.2) Создание новой таблицы

    Автоматически в таблице создается ключевое поле ID, определяющее внутренний идентификатор каждой записи. Это поле будет использоваться как ключевое. Остальные поля необходимо дописать в таблице, выбрать их тип и для обязательных установить флажок Обязательно.

    В панели свойств можно установить дополнительные характеристики для создаваемых полей (рис 11.3).

    (рис 11.3) Свойства полей

    Кнопка Список значений позволяет задать выпадающий список для выбора нужного значения.

    Кнопка Настраиваемая проверка запускает редактор кода в котором можно определить условия правильности вводимым в поле значений и обеспечить возможность добавления только соответствующих значений.

    В конструкторе таблиц в секции Добавить, можно выбрать:

  • Вычисляемое свойство
  • Отношение
  • Запрос
  • Экран
  • Вычисляемое свойство, это особый тип для таблиц LightSwitch, который динамически рассчитывается на основе других значений данной таблицы.

    (рис 11.4) Определение вычисляемого свойства

    Сам расчет вычисляемого значения выполняется в коде программы:

     partial void ФИОСтудента_Compute(ref string result)
            {
                // Присвоение результату значения нужного поля
           result = ФамилияСтудента + ' ' + ИмяСтудента + ' '  + ОтчествоСтудента;
            }
    

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

    Разработка базы данных подразумевает установление отношений между созданными таблицами. Для этого в LightSwitch используется специальное диалоговое окно (рис 11.5):

    (рис 11.5) Определение связей

    Это окно позволяет выбрать связываемые таблицы и тип связей между ними (отношение многие – ко – многим не поддерживается). Тут же устанавливается поведение при удалении, возможны два варианта:

  • Каскадное удаление – подразумевает автоматическое удаление записей из подчиненных таблиц при удалении связанной записи из главной таблицы;
  • Ограниченный доступ – при возникновении конфликтов связанных записей выводится предупреждение.
  • Большое внимание разработчики LightSwitch уделили механизмам отбора записей из источников данных. Ими были использованы лучшие наработки других Object Relation mapping (ORM) и реализован как концептуально эффективный, так интерфейсно удобный механизм создания запросов. В его основе лежат запросы двух видов:

  • уровня экрана;
  • уровня источников данных.
  • Запросы уровня экрана связывают через общие переменные различные элементы экрана, обеспечивая механизм стандартного просмотра Мастер - Подробности.

    Запрос уровня экрана строится на основе данных экрана, которые добавляются в момент создания экрана. Для создания запроса используется специальный дизайнер. Рассмотрим на примере создания такого типа запросов.

    Рядом с именем источника данных расположена кнопка редактор запроса, которая запускает специальный дизайнер запросов для данных экрана (рис 11.6).

    (рис 11.6) Создание фильтра для запроса

    В этом дизайнере можно создавать критерии фильтрации данных, а также определять способ сортировки. Критерии могут быть основаны на фиксированных значениях их достаточно просто указать. Более общий случай состоит в использовании параметров. Для создания параметра можно использовать раздел Параметры, где с помощью ссылки Добавить параметр. Обычное условие фильтрации состоит из следующих частей:

  • Приложение ГДЕ или ГДЕ НЕ.
  • Поля для фильтрации (можно выбрать из списка).
  • Оператор сравнения (выбирается из списка <=; =; >= и др.).
  • Опция параметра указывается знаком @ (другие элементы списка Литерал, Свойство и Параметр).
  • Имя параметра (при необходимости можно создать новый параметр).
  • После создания фильтра с параметром уровня экрана в конструкторе экрана необходимо создать переменную. В ней будет сохраняться значение параметра, и через нее будет осуществляться передача параметра в фильтр.

    Для создания переменной используется кнопка ).

    (рис 11.7) Создание локального свойства

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

    Затем необходимо связать переменную и свойство из фильтра. Для этого необходимо выделить параметр в списке данных экрана (слева от дерева экрана) и в окне ).

    (рис 11.8) Привязка параметра и переменной

    В списке данных экрана переменная и параметр станут связанными стрелочкой. Затем созданную переменную можно использовать в коде программы и ее значение будет передаваться в связанный с ней параметр (рис 11.10).

    (рис 11.9) Связь между параметром и переменной

    На основе описанного подхода можно реализовывать эффективный для баз данных интерфейс вида Мастер – Подробности, кода значения из главной таблицы выбираются из списка, а в подчиненных таблице с помощью таблицы данных отображаются только связанные с выбранным значением данные.

    Кроме того, локальная переменная имеет свойство Является параметром. Если установить это свойство, то можно добиться того, чтобы представляла собой глобальный параметр экрана, что позволит использовать ее из других экранов. Эта возможность может быть задействована, когда связанные таблицы располагаются на различных экранах. С использованием глобальной экранной переменной можно обеспечить фильтрацию в подчиненном экране в зависимости от значений, выбранных на главном экране.

    Другой тип запросов – запросы уровня сущности. Их можно отнести к глобальным, так как они носят общий для всего проекта характер и могут быть использованы различными экранами. Как и запросы уровня экрана, данный тип запросов может иметь критерии фильтрации и сортировки, а также обладать параметрами.

    Создать такой тип запросов можно двумя способами:

  • в инспекторе проекта выполнить щелчок правой кнопкой на сущности, для которой необходимо построить запрос и выбрав команду Добавить запрос в контекстном меню;
  • открыть сущность в Конструкторе Данных и нажать кнопку Запрос на панели инструментов конструктора.
  • Любой из способов приведет к запуску редактора запросов, аналогичного Запросам уровня экрана с такими же возможностями. После своего создания запросы уровня сущности будут отображаться в раскрывающемся списке под своей сущностью (рис 11.11).

    (рис 11.10) Создание запроса уровня сущности

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

    partial void ВсеЗаданныеОценкиGrid_InitializeDataWorkspace(List<IDataService> saveChangesTo)
            {
                // Добавьте сюда свой код.
                ОценкиЗаСеместрЗначениеОценки = "Отлично";
            }
    

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

    Для подключения внешнего источника данных необходимо вызвать команду ).

    (рис 11.11) Внешний источник данных

    Выбрав нужный тип источника можно переходить к его настройке. Для SQL Server это будет стандартное окно подключения к базе данных (рис 11.12).

    (рис 11.12) Подключение к базе данных

    Для других источников также выводятся специальные окна настройки подключения. Рассмотрим принципы использования других источников данных помимо SQL Server и SQL Server Azure.

    Наиболее универсальным провайдером данных является служба WCF RIA. Как было описано во второй лекции, WCF RIA обеспечивает единый механизм доступа к данным из приложений Silverlight. Это свойство можно использовать в случаях, когда данные находятся не в SQL Server или списках SharePoint, когда нет достаточных прав для подключения к SQL Server. WCF RIA обеспечивает обертку для данных из различных источников. Приложение LightSwitch получает данные и преобразует их в представление сущности.

    При этом, в ходе создания сервиса WCF RIA необходимо придерживаться определенных требований, в частности необходимо иметь не менее одного метода в классе Domain Service с атрибутом Query. WCF RIA службы будут полезны и в тех случаях, когда прямой доступ к базе данных из LightSwitch приложения запрещен политикой безопасности.

    Еще одним стандартным источником данных могут быть списки SharePoint. Microsoft ориентирует SharePoint как внутрикорпоративное хранилище информации и возможность получения информации из этого хранилища является важной функцией. Для подключения необходимо, чтобы на сервере была установлена версия SharePoint 2010 с установленными службами WCF RIA. Затем использование этого источника данных происходят стандартным образом. В мастере настроек после выбора Share Point как источника будут отображаться все элементы с сервера Share Point. Выбрав необходимые будет установлено подключение и в инспекторе проекта создана группа Данные Share Point. Полученные данные можно объединить с данными, хранимыми внутри приложения. Для этого между ними необходимо установить связи. Затем на основе данных можно создавать экраны и использовать их стандартным способом.

    Краткие итоги

  • Приоритетным источником данных является Microsoft SOL Server, но внешние источники данных не ограничиваются только им: также можно использовать SharePoint списки, WCF RIA Service.
  • LightSwitch обладает собственной моделью данных, которая основана на CLR, но имеет ряд особенностей и их необходимо учитывать в ходе разработки приложений.
  • Все простые и семантические типы поддерживают пустое значение Null.
  • Для внутренних нужд LightSwitch может использовать источник данных ApplicationData.
  • В панели свойств можно установить дополнительные характеристики для создаваемых полей.
  • Вычисляемое свойство – это особый тип для таблиц LightSwitch, который динамически рассчитывается на основе других значений данной таблицы.
  • Большое внимание разработчики LightSwitch уделили механизмам отбора записей из источников данных.
  • Запросы уровня сущности можно отнести к глобальным, так как они носят общий для всего проекта характер и могут быть использованы различными экранами.
  • Для подключения внешнего источника данных необходимо вызвать команду Добавить источник данных в инспекторе проекта.
  • Вернуться к учебному плану