Разработка приложений для Windows Phone 7

Разработка бизнес-приложений Silverlight

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

Дополнительные материалы к занятию можно скачать здесь.

Вложенные папки: AdventureWorksOrders

Ссылки: http://msdn.microsoft.com/en-us/library/ee796241%28v=VS.91%29.aspx#Y3075

Microsoft Silverlight является реализацией .NET Framework, поддерживаемой различными браузерами и платформами, предназначенная для создания и представления мультимедиа и многофункциональных приложений (RIA) нового поколения в Интернете. Silverlight объединяет возможности сервера, Интернета и персонального компьютера; возможности управляемого кода и динамических языков, декларативного и традиционного программирования, а также мощные средства Windows Presentation Foundation (WPF) [34].

Для запуска приложения Silverlight пользователям необходим небольшой подключаемый модуль для браузера. Подключаемый модуль предоставляется бесплатно. Если у пользователя еще не установлен подключаемый модуль, ему автоматически предлагается установить его. Загрузка и установка занимают всего несколько секунд и не требуют от пользователя никаких действий, кроме разрешения на установку [34].

Silverlight гарантирует, что пользователи могут запускать приложения во всех современных браузерах без создания специального кода для браузера. Приложения Silverlight могут выполняться в браузере или вне браузера [34].

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

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

Silverlight поддерживает службы ASMX, WCF и REST, а также сокеты и net.tcp.

Работа со службами ASMX и WCF аналогична с точки зрения Silverlight. При реализации службы выбором по умолчанию должна быть WCF [35].

Бизнес-приложение Silverlight обычно состоит из клиентской и серверной частей:

(рис 30.2) Архитектура приложения

Клиентская часть представлена Silverlight приложением. Silverlight приложение - это .xap файл (по сути дела тот же zip архив, содержащий все ресурсы и сборки приложения), выполняющийся в плагине Silverlight [36]. Существует несколько типов проектов Silverlight:

Silverlight Application обычное приложение Silverlight.
Silverlight Class Library библиотека классов Silverlight, этот тип проекта использовался для слоев: Presentation, Infrastructure, Domain.
Silverlight Navigation Application приложение SIlverlight, поддерживающее навигацию, этот тип проекта использовался для слоя View.

Серверная часть представлена WCF сервисом, взаимодействующим с БД через соответствующий слой Data Access. Рассмотрим подробнее слои приложения:

Domain Этот слой находится в центре приложения и инкапсулирует в себе всю бизнес-логику и знания предметной области. Данный слой содержит все основные бизнес-сущности и бизнес-правила предметной области. Классы Solution (программный проект), Measure (показатель), Developer (разработчик), SolutionProfile (профиль проекта) относятся именно к доменным объектам. В приложении должен быть единый домен, поскольку все, что относится к бизнесу описано именно в этом слое. Однако в архитектуре приложения присутствует два домена. Это связано с ограничением технологии Silverlight. Поскольку технология Silverlight работает на своей платформe Silverlight .Net Framework, которая является сильно урезанной версией полноценного .Net Framework, то совместное использование доменных объектов сборками Silverlight и .Net Framework без перекомпиляции невозможно [36].

Для разрешения данной проблемы и были созданы две сборки Domain: одна используется Silverlight сборками клиентской части, а вторая используется WCF сервисом, работающим под управление полноценного .Net Framework.

Presentation Этот слой содержит в себе всю логику работы интерфейса. В этом слое содержатся классы презентеров (Presenters), которые управляют видами (Views). В этом же слое объявлены интерфейсы IViews, которые реализуются в слое View. Также здесь содержатся плоские объекты, так называемы Presenter Entities, которые обеспечивают более удобное представление доменных объектов для отображения. Вся логика работы интерфейса заложена в этом слое. Поскольку он отделен непосредственно от представления (View), и реализован в виде библиотеки классов, то данный слой идеально поддается модульному тестированию, что естественно является одной из главных особенностей и преимуществ шаблона MVP [36].
View Этот слой представляет собой UI приложения. В нем реализуются интерфейсы, объявленные в слое Presenter (IViews). Сам View содержит в себе минимум логики (Passive View), и имеет только простые свойства, для отображения данных [36].
Infrastructure Данный слой содержит классы адаптеров, которые предоставляют и сохраняют доменные объекты по запросу презентеров. Разнообразие адаптеров скрывается от слоя Presenter одним общим фасадом (GOF Facade pattern), что делает работу со слоем Infrastructure очень простой и удобной. Сами интерфейсы фасада и адаптеров объявлены в слое Domain, а в слое Infrastructure содержится реализация этих интерфейсов.

Серверная часть реализована в виде WCF сервиса, который с помощью слоя DataAccess (в нашем случае в качестве ORM мы использовали LINQ to SQL) получает данные из BD, формирует доменные объекты и передает их в клиентскую инфраструктуру. Однако для того чтобы передать доменные объекты необходимо их сериализовать, то есть преобразовать из сложных объектов в строку, а на клиенте в слое Infrastructure соответственно десериализовать строку в доменные объекты. Для сериализации мы использовали класс DataContractSerializer, доступный как в полноценных сборках .Net, так и в сборках Silverlight, что очень важно при интеграции приложения, поскольку сериализация и десериализация доменных объектов происходит как в клиентских сборках, так и в серверных сборках [36].

Практическое занятие 29. Отображение связанных данных в бизнес-приложении Silverlight

В ходе выполнения данной работы мы создадим бизнес-приложение Silverlight, предназначенное для отображения данных из двух связанных таблиц базы данных ).

Для выполнения работы необходимо выполнить следующую последовательность действий:

  • Создать бизнес-приложение Silverlight, содержащее два проекта: клиент Silverlight и веб-приложение ASP.NET.
  • Изменить название приложения с помощью модификации строки ресурсов.
  • Создать модель сущности данных, основанную на файле базы данных.
  • Создать доменную службу, представляющую данные в модели сущности данных для клиента Silverlight.
  • Изменить запрос в доменной службе для того, чтобы вернуть связанные данные.
  • Изменить метаданные доменной службы для поддержки загрузки связанных данных.
  • Создать дополнительную страницу Silverlight для того, чтобы отображать данные пользователям.
  • Добавить кнопку на стандартную панель навигации для обеспечения доступа к странице Silverlight.
  • Сконфигурировать страницы Silverlight для отображения данных за счет перетаскивания элементов из окна Источник данных в конструктор Silverlight.
  • Добавить элемент управления DataPager для навигации по записям
  • Пререквезиты

    Для выполнения предлагаемой работы требуется предварительная инсталляция определенного программного обеспечения, такого как Visual Studio 2010, Silverlight Developer Runtime вместе с SDK, а также WCF RIA Services и WCF RIA Services Toolkit. Потребуется также установить и настроить SQL Server 2008 R2 Express с расширенными службами и инсталлированными базами данных AdventureWorks OLTP и LT.

    Создание бизнес-приложения Silverlight

    Бизнес-приложения Silverlight являются решениями, состоящими из двух проектов: Приложение Silverlight и веб-приложение ASP.Net, запускающее Silverlight-приложение. Бизнес-приложения Silverlight имеют встроенную функциональность. По умолчанию имеется страничка Home, страничка About, навигационная панель, а также функциональность для регистрации.

    Для создания приложения необходимо:

  • В In Visual Studio 2010 создайте новый проект Бизнес-приложения Silverlight в C# с именем AdventureWorksOrders. Решение AdventureWorksOrders solution создается с двумя проектами: Silverlight-проект AdventureWorksOrders и проект веб-приложения AdventureWorksOrders.Web.
  • В Solution Explorer разверните проект AdventureWorksOrders
  • Разверните папку Resources, вложенную в папку Assets
  • Дважды щелкните по файлу ApplicationStrings.resx для того, чтобы запустить инструмент Resource Designer.
  • Внесите изменение в строку ресурсов, заменив строку ApplicationName на Adventure Works Orders.
  • Сохраните изменения и закройте файл ApplicationStrings.resx.
  • Запустите проект. Откроется домашняя страница и отобразит измененное название приложения.
  • Создание модели данных для приложения

    Для того, чтобы управлять данными в приложении мы будем использовать модель сущности данных

    Для того, чтобы создать модель сущности данных необходимо:

  • В Solution Explorer, щелкните правой кнопкой мышки по проекту AdventureWorksOrders.Web, выберите пункт Add, а потом - New Item. Появится диалоговое окно Add New Item.
  • В категории Data щелкните по шаблону ADO.NET Entity Data Model.
  • Измените название на AdventureWorksEDM.edmx и щелкните по пункту Add. При этом откроется мастер Entity Data Model Wizard.
  • На странице Choose Model Contents щелкните мышкой по пункту Generate from database и щелкните по пункту Next.
  • На странице Choose Your Data Connection щелкните по пункту New Connection. При этом появится окно диалога Connection Properties.
  • В качестве источника данных выберите пункт Select Microsoft SQL Server Database File, укажите расположение файла базы данных AdventureWorksLT.
  • Нажмите OK.
  • На странице Choose Your Data Connection щелкните Next.
  • Если появится предложение скопировать файл базы данных в проект и изменить соединение, нажмите на пункт Yes.
  • На странице Choose Your Database Objects разверните узел Tables.
  • Поставьте галочки рядом с таблицами SalesOrderDetail (SalesLT) и SalesOrderHeader (SalesLT).
  • Щелкните мышкой Finish. В дизайнере сущностей появятся таблицы SalesOrderDetail и SalesOrderHeader.
  • Запустите проект

    Вы должны запустить проект перед добавлением службы доменов.

  • Создание службы доменов

    Служба доменов отображает сущности данных и операций в модели данных для клиента. В данном упражнении мы добавим службу доменов к серверному проекту.

    Для того, чтобы создать службу доменов необходимо:

  • В Solution Explorer щелкните правой кнопкой мышки по проекту AdventureWorksOrders.Web, щелкните Add, после чего щелкните по пункту New Item. Появится окно диалога Add New Item.
  • В категории Web щелкните по шаблону Domain Service Class.
  • Назовите класс службы доменов именем AdventureWorksService, после чего щелкните по пункту Add. Появится окно диалога Add New Domain Service Class.
  • Поставьте галочку в пункте Enable editing, после чего поставьте галочки напротив сущностей SalesOrderDetail и SalesOrderHeader.
  • Нажмите OK.
  • Запустите решение
  • Редактирование запроса службы доменов с целью включения связанных данных

    Служба доменов предоставляет основные операции, требующие модификации в конкретном приложении. В данном примере мы отредактируем запрос GetSalesOrderHeaders, так, чтобы он возвращал связанные записи SalesOrderDetail. Для запуска объекта DataPager также требуется задание порядка сортировки в запросе.

    Для того, чтобы изменить запрос службы домена необходимо:

  • В Solution Explorer дважды щелкните по файлу AdventureWorksService.cs.
  • Обновите метод GetSalesOrderHeaders следующим кодом.
    public IQueryable<SalesOrderHeader> GetSalesOrderHeaders()
    {
        return this.ObjectContext.SalesOrderHeaders.Include("SalesOrderDetails").OrderBy(e => e.SalesOrderID);
    }
              
  • в Solution Explorer дважды щелкните по файлу AdventureWorksService.metadata.cs.
  • В классе SalesOrderHeaderMetadata добавьте атрибут Include обязательно перед выражением коллекции сущностей SalesOrderDetails:
     [Include]
    public EntityCollection<SalesOrderDetail> SalesOrderDetails { get; set; }
              
  • Запустите решение.
  • Создание страницы Silverlight для отображения данных

    В этом упражнении мы добавим страницу Orders для отображения данных из таблиц.

    Создание страницы Silverlight

  • В Solution Explorer, в AdventureWorksOrders, щелкните правой кнопкой по папке Views и добавьте новый элемент.
  • В диалоговом окне Add New Item щелкните по категории Silverlight, затем щелкните по шаблону Silverlight Page.
  • Назовите Orders.xaml, щелкните по пункту Add.
  • Добавление кнопки навигации к домашней стричке

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

    Создание кнопки навигации

  • В Solution Explorer дважды щелкните по MainPage.xaml.
  • В окне XAML добавьте следующий код после строки
    <HyperlinkButton x:Name="Link2" ... />.
    <Rectangle x:Name="Divider3" Style="{StaticResource DividerStyle}"/>
    <HyperlinkButton x:Name="Link3" Content="Orders" 
      Style="{StaticResource LinkStyle}" NavigateUri="/Orders" TargetName="ContentFrame"/>
              
  • Запустите приложение. В панели навигации должна появиться кнопка Orders.
  • Щелкните по кнопке Order. Появится пустая страничка Orders.
  • Отображение связанных данных на странице

    В этом упражнении мы создадим элемент управления связывания данных на странице Orders за счет перетаскивания элементов из окна Data Sources прямо в конструктор. Вначале мы создадим DataGrid, отображающий основную информацию об отдельном заказе, такую как Account Number, CustomerID, и Amount Due. Затем мы создадим элемент управления Grid, который перечисляет индивидуальные элементы заказа.

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

  • В Solution Explorer дважды щелкните по Orders.xaml.
  • Выберите меню Data и щелкните Show Data Sources. Откроется окно Data Sources. Учтите, что окно Data Sources уже содержитсущности, доступные для приложения.
  • Щелкните по узлу SalesOrderHeader и щелкните по ниспадающему меню.
  • Щелкните Details.
  • Из окна Data Sources перетащите узел SalesOrderHeader в конструктор. При этом будет создан Grid, наполненный данными из таблицы SalesOrderHeader.
  • In the Data Sources window, expand the SalesOrderHeader node.
  • Click the SalesOrderDetails node (the child node of the SalesOrderHeader node).
  • Перетащите узел SalesOrderDetails в конструктор. Появится DataGrid, содержащий данные из таблицы SalesOrderDetail.
  • Добавление разбивки на страницы для навигации по данным заказа

    В данном упражнении мы добавим разбивку на страницы за счет добавления элемента управления DataPager к источнику данных. Мы установим DataPager.Source в положение DomainDataSource для управления данными на странице.

    Нужно при этом учитывать, что DataPager требует, чтобы его данные были явно отсортированы. Именно поэтому выражение OrderBy было добавлено в запрос в самом начале упражнения.

    Конфигурирование разбивки данных на страницы

  • В Solution Explorer дважды щелкните по Orders.xaml.
  • Найдите элемент управления DataPager в панели инструментов.
  • Перетащите DataPager в конструктор.
  • В окне Data Sources щелкните по узлу SalesOrderHeader.
  • Перетащите узел SalesOrderHeader на DataPager. Это свяжет свойство Source элемента управления DataPager с корректным источником данных.
  • Выберите DataPager в конструкторе.
  • В окне Properties установите свойство PageSize равным 1.
  • Тестирование приложения

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

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

  • В меню Build щелкните по Build Solution. Убедитесь, что приложение работает без ошибок.
  • Запустите приложение.
  • Нажмите на кнопку Orders.
  • Щелкните по кнопкам навигации на элементе управления DataPager для навигации по записям.
  • Учтите, что связь между главной и подчиненной таблицами появится в DataGrid при навигации по записям заголовка заказов.

    Страницы:

    Дополнительные материалы к занятию можно скачать здесь.

    Вложенные папки: AdventureWorksOrders

    Ссылки: http://msdn.microsoft.com/en-us/library/ee796241%28v=VS.91%29.aspx#Y3075

    Microsoft Silverlight является реализацией .NET Framework, поддерживаемой различными браузерами и платформами, предназначенная для создания и представления мультимедиа и многофункциональных приложений (RIA) нового поколения в Интернете. Silverlight объединяет возможности сервера, Интернета и персонального компьютера; возможности управляемого кода и динамических языков, декларативного и традиционного программирования, а также мощные средства Windows Presentation Foundation (WPF) [34].

    Для запуска приложения Silverlight пользователям необходим небольшой подключаемый модуль для браузера. Подключаемый модуль предоставляется бесплатно. Если у пользователя еще не установлен подключаемый модуль, ему автоматически предлагается установить его. Загрузка и установка занимают всего несколько секунд и не требуют от пользователя никаких действий, кроме разрешения на установку [34].

    Silverlight гарантирует, что пользователи могут запускать приложения во всех современных браузерах без создания специального кода для браузера. Приложения Silverlight могут выполняться в браузере или вне браузера [34].

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

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

    Silverlight поддерживает службы ASMX, WCF и REST, а также сокеты и net.tcp.

    Работа со службами ASMX и WCF аналогична с точки зрения Silverlight. При реализации службы выбором по умолчанию должна быть WCF [35].

    Бизнес-приложение Silverlight обычно состоит из клиентской и серверной частей:

    (рис 30.2) Архитектура приложения

    Клиентская часть представлена Silverlight приложением. Silverlight приложение - это .xap файл (по сути дела тот же zip архив, содержащий все ресурсы и сборки приложения), выполняющийся в плагине Silverlight [36]. Существует несколько типов проектов Silverlight:

    Silverlight Application обычное приложение Silverlight.
    Silverlight Class Library библиотека классов Silverlight, этот тип проекта использовался для слоев: Presentation, Infrastructure, Domain.
    Silverlight Navigation Application приложение SIlverlight, поддерживающее навигацию, этот тип проекта использовался для слоя View.

    Серверная часть представлена WCF сервисом, взаимодействующим с БД через соответствующий слой Data Access. Рассмотрим подробнее слои приложения:

    Domain Этот слой находится в центре приложения и инкапсулирует в себе всю бизнес-логику и знания предметной области. Данный слой содержит все основные бизнес-сущности и бизнес-правила предметной области. Классы Solution (программный проект), Measure (показатель), Developer (разработчик), SolutionProfile (профиль проекта) относятся именно к доменным объектам. В приложении должен быть единый домен, поскольку все, что относится к бизнесу описано именно в этом слое. Однако в архитектуре приложения присутствует два домена. Это связано с ограничением технологии Silverlight. Поскольку технология Silverlight работает на своей платформe Silverlight .Net Framework, которая является сильно урезанной версией полноценного .Net Framework, то совместное использование доменных объектов сборками Silverlight и .Net Framework без перекомпиляции невозможно [36].

    Для разрешения данной проблемы и были созданы две сборки Domain: одна используется Silverlight сборками клиентской части, а вторая используется WCF сервисом, работающим под управление полноценного .Net Framework.

    Presentation Этот слой содержит в себе всю логику работы интерфейса. В этом слое содержатся классы презентеров (Presenters), которые управляют видами (Views). В этом же слое объявлены интерфейсы IViews, которые реализуются в слое View. Также здесь содержатся плоские объекты, так называемы Presenter Entities, которые обеспечивают более удобное представление доменных объектов для отображения. Вся логика работы интерфейса заложена в этом слое. Поскольку он отделен непосредственно от представления (View), и реализован в виде библиотеки классов, то данный слой идеально поддается модульному тестированию, что естественно является одной из главных особенностей и преимуществ шаблона MVP [36].
    View Этот слой представляет собой UI приложения. В нем реализуются интерфейсы, объявленные в слое Presenter (IViews). Сам View содержит в себе минимум логики (Passive View), и имеет только простые свойства, для отображения данных [36].
    Infrastructure Данный слой содержит классы адаптеров, которые предоставляют и сохраняют доменные объекты по запросу презентеров. Разнообразие адаптеров скрывается от слоя Presenter одним общим фасадом (GOF Facade pattern), что делает работу со слоем Infrastructure очень простой и удобной. Сами интерфейсы фасада и адаптеров объявлены в слое Domain, а в слое Infrastructure содержится реализация этих интерфейсов.

    Серверная часть реализована в виде WCF сервиса, который с помощью слоя DataAccess (в нашем случае в качестве ORM мы использовали LINQ to SQL) получает данные из BD, формирует доменные объекты и передает их в клиентскую инфраструктуру. Однако для того чтобы передать доменные объекты необходимо их сериализовать, то есть преобразовать из сложных объектов в строку, а на клиенте в слое Infrastructure соответственно десериализовать строку в доменные объекты. Для сериализации мы использовали класс DataContractSerializer, доступный как в полноценных сборках .Net, так и в сборках Silverlight, что очень важно при интеграции приложения, поскольку сериализация и десериализация доменных объектов происходит как в клиентских сборках, так и в серверных сборках [36].

    Практическое занятие 29. Отображение связанных данных в бизнес-приложении Silverlight

    В ходе выполнения данной работы мы создадим бизнес-приложение Silverlight, предназначенное для отображения данных из двух связанных таблиц базы данных ).

    Для выполнения работы необходимо выполнить следующую последовательность действий:

  • Создать бизнес-приложение Silverlight, содержащее два проекта: клиент Silverlight и веб-приложение ASP.NET.
  • Изменить название приложения с помощью модификации строки ресурсов.
  • Создать модель сущности данных, основанную на файле базы данных.
  • Создать доменную службу, представляющую данные в модели сущности данных для клиента Silverlight.
  • Изменить запрос в доменной службе для того, чтобы вернуть связанные данные.
  • Изменить метаданные доменной службы для поддержки загрузки связанных данных.
  • Создать дополнительную страницу Silverlight для того, чтобы отображать данные пользователям.
  • Добавить кнопку на стандартную панель навигации для обеспечения доступа к странице Silverlight.
  • Сконфигурировать страницы Silverlight для отображения данных за счет перетаскивания элементов из окна Источник данных в конструктор Silverlight.
  • Добавить элемент управления DataPager для навигации по записям
  • Пререквезиты

    Для выполнения предлагаемой работы требуется предварительная инсталляция определенного программного обеспечения, такого как Visual Studio 2010, Silverlight Developer Runtime вместе с SDK, а также WCF RIA Services и WCF RIA Services Toolkit. Потребуется также установить и настроить SQL Server 2008 R2 Express с расширенными службами и инсталлированными базами данных AdventureWorks OLTP и LT.

    Создание бизнес-приложения Silverlight

    Бизнес-приложения Silverlight являются решениями, состоящими из двух проектов: Приложение Silverlight и веб-приложение ASP.Net, запускающее Silverlight-приложение. Бизнес-приложения Silverlight имеют встроенную функциональность. По умолчанию имеется страничка Home, страничка About, навигационная панель, а также функциональность для регистрации.

    Для создания приложения необходимо:

  • В In Visual Studio 2010 создайте новый проект Бизнес-приложения Silverlight в C# с именем AdventureWorksOrders. Решение AdventureWorksOrders solution создается с двумя проектами: Silverlight-проект AdventureWorksOrders и проект веб-приложения AdventureWorksOrders.Web.
  • В Solution Explorer разверните проект AdventureWorksOrders
  • Разверните папку Resources, вложенную в папку Assets
  • Дважды щелкните по файлу ApplicationStrings.resx для того, чтобы запустить инструмент Resource Designer.
  • Внесите изменение в строку ресурсов, заменив строку ApplicationName на Adventure Works Orders.
  • Сохраните изменения и закройте файл ApplicationStrings.resx.
  • Запустите проект. Откроется домашняя страница и отобразит измененное название приложения.
  • Создание модели данных для приложения

    Для того, чтобы управлять данными в приложении мы будем использовать модель сущности данных

    Для того, чтобы создать модель сущности данных необходимо:

  • В Solution Explorer, щелкните правой кнопкой мышки по проекту AdventureWorksOrders.Web, выберите пункт Add, а потом - New Item. Появится диалоговое окно Add New Item.
  • В категории Data щелкните по шаблону ADO.NET Entity Data Model.
  • Измените название на AdventureWorksEDM.edmx и щелкните по пункту Add. При этом откроется мастер Entity Data Model Wizard.
  • На странице Choose Model Contents щелкните мышкой по пункту Generate from database и щелкните по пункту Next.
  • На странице Choose Your Data Connection щелкните по пункту New Connection. При этом появится окно диалога Connection Properties.
  • В качестве источника данных выберите пункт Select Microsoft SQL Server Database File, укажите расположение файла базы данных AdventureWorksLT.
  • Нажмите OK.
  • На странице Choose Your Data Connection щелкните Next.
  • Если появится предложение скопировать файл базы данных в проект и изменить соединение, нажмите на пункт Yes.
  • На странице Choose Your Database Objects разверните узел Tables.
  • Поставьте галочки рядом с таблицами SalesOrderDetail (SalesLT) и SalesOrderHeader (SalesLT).
  • Щелкните мышкой Finish. В дизайнере сущностей появятся таблицы SalesOrderDetail и SalesOrderHeader.
  • Запустите проект

    Вы должны запустить проект перед добавлением службы доменов.

  • Создание службы доменов

    Служба доменов отображает сущности данных и операций в модели данных для клиента. В данном упражнении мы добавим службу доменов к серверному проекту.

    Для того, чтобы создать службу доменов необходимо:

  • В Solution Explorer щелкните правой кнопкой мышки по проекту AdventureWorksOrders.Web, щелкните Add, после чего щелкните по пункту New Item. Появится окно диалога Add New Item.
  • В категории Web щелкните по шаблону Domain Service Class.
  • Назовите класс службы доменов именем AdventureWorksService, после чего щелкните по пункту Add. Появится окно диалога Add New Domain Service Class.
  • Поставьте галочку в пункте Enable editing, после чего поставьте галочки напротив сущностей SalesOrderDetail и SalesOrderHeader.
  • Нажмите OK.
  • Запустите решение
  • Редактирование запроса службы доменов с целью включения связанных данных

    Служба доменов предоставляет основные операции, требующие модификации в конкретном приложении. В данном примере мы отредактируем запрос GetSalesOrderHeaders, так, чтобы он возвращал связанные записи SalesOrderDetail. Для запуска объекта DataPager также требуется задание порядка сортировки в запросе.

    Для того, чтобы изменить запрос службы домена необходимо:

  • В Solution Explorer дважды щелкните по файлу AdventureWorksService.cs.
  • Обновите метод GetSalesOrderHeaders следующим кодом.
    public IQueryable<SalesOrderHeader> GetSalesOrderHeaders()
    {
        return this.ObjectContext.SalesOrderHeaders.Include("SalesOrderDetails").OrderBy(e => e.SalesOrderID);
    }
              
  • в Solution Explorer дважды щелкните по файлу AdventureWorksService.metadata.cs.
  • В классе SalesOrderHeaderMetadata добавьте атрибут Include обязательно перед выражением коллекции сущностей SalesOrderDetails:
     [Include]
    public EntityCollection<SalesOrderDetail> SalesOrderDetails { get; set; }
              
  • Запустите решение.
  • Создание страницы Silverlight для отображения данных

    В этом упражнении мы добавим страницу Orders для отображения данных из таблиц.

    Создание страницы Silverlight

  • В Solution Explorer, в AdventureWorksOrders, щелкните правой кнопкой по папке Views и добавьте новый элемент.
  • В диалоговом окне Add New Item щелкните по категории Silverlight, затем щелкните по шаблону Silverlight Page.
  • Назовите Orders.xaml, щелкните по пункту Add.
  • Добавление кнопки навигации к домашней стричке

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

    Создание кнопки навигации

  • В Solution Explorer дважды щелкните по MainPage.xaml.
  • В окне XAML добавьте следующий код после строки
    <HyperlinkButton x:Name="Link2" ... />.
    <Rectangle x:Name="Divider3" Style="{StaticResource DividerStyle}"/>
    <HyperlinkButton x:Name="Link3" Content="Orders" 
      Style="{StaticResource LinkStyle}" NavigateUri="/Orders" TargetName="ContentFrame"/>
              
  • Запустите приложение. В панели навигации должна появиться кнопка Orders.
  • Щелкните по кнопке Order. Появится пустая страничка Orders.
  • Отображение связанных данных на странице

    В этом упражнении мы создадим элемент управления связывания данных на странице Orders за счет перетаскивания элементов из окна Data Sources прямо в конструктор. Вначале мы создадим DataGrid, отображающий основную информацию об отдельном заказе, такую как Account Number, CustomerID, и Amount Due. Затем мы создадим элемент управления Grid, который перечисляет индивидуальные элементы заказа.

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

  • В Solution Explorer дважды щелкните по Orders.xaml.
  • Выберите меню Data и щелкните Show Data Sources. Откроется окно Data Sources. Учтите, что окно Data Sources уже содержитсущности, доступные для приложения.
  • Щелкните по узлу SalesOrderHeader и щелкните по ниспадающему меню.
  • Щелкните Details.
  • Из окна Data Sources перетащите узел SalesOrderHeader в конструктор. При этом будет создан Grid, наполненный данными из таблицы SalesOrderHeader.
  • In the Data Sources window, expand the SalesOrderHeader node.
  • Click the SalesOrderDetails node (the child node of the SalesOrderHeader node).
  • Перетащите узел SalesOrderDetails в конструктор. Появится DataGrid, содержащий данные из таблицы SalesOrderDetail.
  • Добавление разбивки на страницы для навигации по данным заказа

    В данном упражнении мы добавим разбивку на страницы за счет добавления элемента управления DataPager к источнику данных. Мы установим DataPager.Source в положение DomainDataSource для управления данными на странице.

    Нужно при этом учитывать, что DataPager требует, чтобы его данные были явно отсортированы. Именно поэтому выражение OrderBy было добавлено в запрос в самом начале упражнения.

    Конфигурирование разбивки данных на страницы

  • В Solution Explorer дважды щелкните по Orders.xaml.
  • Найдите элемент управления DataPager в панели инструментов.
  • Перетащите DataPager в конструктор.
  • В окне Data Sources щелкните по узлу SalesOrderHeader.
  • Перетащите узел SalesOrderHeader на DataPager. Это свяжет свойство Source элемента управления DataPager с корректным источником данных.
  • Выберите DataPager в конструкторе.
  • В окне Properties установите свойство PageSize равным 1.
  • Тестирование приложения

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

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

  • В меню Build щелкните по Build Solution. Убедитесь, что приложение работает без ошибок.
  • Запустите приложение.
  • Нажмите на кнопку Orders.
  • Щелкните по кнопкам навигации на элементе управления DataPager для навигации по записям.
  • Учтите, что связь между главной и подчиненной таблицами появится в DataGrid при навигации по записям заголовка заказов.

    Вернуться к учебному плану