В этой статье я бы хотел рассказать о том, как создать приложение Silverlight 5 и заставить его работать с DbContext. Данный опыт мне дался достаточно большими усилиями, т.к. организация доступа в Silverlight сильно усложнена, особенно через DbContext.
Создаем новое приложение Silverlight
Включим поддержку WCF RIA Services
Т.к. мы планируем использовать Entity framework 6 (DBContext) нужно добавить пакет OpernRIA DBContext
Добавим модель Entity
Выберем модель и нажмем OK
Укажем параметры подключения к вашей базе данных
Для примера я добавлю всего две таблицы в модель
Нажмите F6 чтобы построить проект
Далее выберите Сервис - Расширения и обновления, слева выберите пункт "В сети"
В строке поиска введите Open RIA
Нажмите кнопку "Загрузить"
После установки пакета перезапустите Visual Studio
В корень проекта Web добавьте папку Services
На этой папке нажмите правой кнопкой и выберите "Создать элемент"
Слева выберите "Веб" и найдите пункт "DomainService"
Поставьте галочки на ваших сущностях, которые вы хотите добавить, для того, чтобы были сгенерированы классы для редактирования, поставьте галочку "Enable editing".
В открывшемся файле закомментируйте строку System.Data
Нажмите F6 чтобы построить проект.
Добавим новый метод GetByUsersByName, который будет возвращать пользователя по его логину. После имени таблицы добавьте Include("UsersDomainLogins"). Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.
Откроем файл DomainService1.metadata.cs, найдем там класс Users и свойство UsersDomainLogins. Добавим атрибут [Include] к этому полю. Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.
Нажмите F6 чтобы построить проект.
Выгрузите проект SilverlightApplication, нажмите на нем правой кнопкой и выберите "Изменить"
Найдите тег переименуйте его в .
Сверните все группы, кроме предпоследней, которая содержит слово targets
Откроем папку с вашим проектом, в ней должна быть папка packages.
Откройте ее.
Откройте папку OpenRiaServices.Server, а в ней папку builds
Там должен быть файл targets
Если он есть, тогда добавьте строку:
Import Project="..\packages\OpenRiaServices.Client.CodeGen.4.4.1.0\build\OpenRiaServices.Client.CodeGen.targets" Condition="Exists('..\packages\OpenRiaServices.Client.CodeGen.4.4.1.0\build\OpenRiaServices.Client.CodeGen.targets')"
Эта строка позволит генерировать файлы сущностей на стороне клиента.
Сохраняем файл и перезагружаем проект.
Добавляем в проект Silverlight новый пакет.
Находим пакет OpenRia Client, который помечен как Full client.
Теперь нужно удалить ссылки на сборки:
System.ServiceModel.DomainServices.Client
System.ServiceModel.DomainServices.Client.Web
Это означает, что Open RIA сгенерировал прокси классы наших сущностей на стороне клиента.
Откроем файл Home.cs и добавим в процедуру OnNavigatedTo немного кода.
Добавим код для загрузки данных с сервера.
И поставим несколько точек останова, чтобы убедиться, что все работает, как мы планировали. Сущность User подгружает связанные сущности UsersDomainLogins.
В данном примере я рассказал, как реализовать работу приложения Silverlight 5 с Entity Framework 5 посредством DbContext и с помощью Open RIA Services.
Данная технология пришла на смену WCF RIA Services которая не поддерживает Entity Framework 6 и даже 5.
На этом раскланиваюсь.
Создаем новое приложение Silverlight
Включим поддержку WCF RIA Services
На WEB проекте добавим новые сборки NuGet
Добавим пакет Entity Framework.
На данный момент актуальная версия 6.1.3
В строке поиска введем OpenRIA Server и добавим пакет в проект
Добавим модель Entity
Выберем модель и нажмем OK
Укажем параметры подключения к вашей базе данных
Нажмите F6 чтобы построить проект
Далее выберите Сервис - Расширения и обновления, слева выберите пункт "В сети"
В строке поиска введите Open RIA
Нажмите кнопку "Загрузить"
После установки пакета перезапустите Visual Studio
В корень проекта Web добавьте папку Services
На этой папке нажмите правой кнопкой и выберите "Создать элемент"
Слева выберите "Веб" и найдите пункт "DomainService"
Поставьте галочки на ваших сущностях, которые вы хотите добавить, для того, чтобы были сгенерированы классы для редактирования, поставьте галочку "Enable editing".
В открывшемся файле закомментируйте строку System.Data
Нажмите F6 чтобы построить проект.
Добавим новый метод GetByUsersByName, который будет возвращать пользователя по его логину. После имени таблицы добавьте Include("UsersDomainLogins"). Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.
Откроем файл DomainService1.metadata.cs, найдем там класс Users и свойство UsersDomainLogins. Добавим атрибут [Include] к этому полю. Это позволит загружать связанные элементы UserDomainLogins при загрузке сущности User.
Нажмите F6 чтобы построить проект.
Выгрузите проект SilverlightApplication, нажмите на нем правой кнопкой и выберите "Изменить"
Найдите тег
Сверните все группы, кроме предпоследней, которая содержит слово targets
Откроем папку с вашим проектом, в ней должна быть папка packages.
Откройте ее.
Откройте папку OpenRiaServices.Server, а в ней папку builds
Там должен быть файл targets
Если он есть, тогда добавьте строку:
Эта строка позволит генерировать файлы сущностей на стороне клиента.
Сохраняем файл и перезагружаем проект.
Добавляем в проект Silverlight новый пакет.
Находим пакет OpenRia Client, который помечен как Full client.
Теперь нужно удалить ссылки на сборки:
System.ServiceModel.DomainServices.Client
System.ServiceModel.DomainServices.Client.Web
Перестроим проект
Нажмем кнопку "Показать все файлы" и откроем папку Generated_Code
Откроем файл Home.cs и добавим в процедуру OnNavigatedTo немного кода.
Добавим код для загрузки данных с сервера.
И поставим несколько точек останова, чтобы убедиться, что все работает, как мы планировали. Сущность User подгружает связанные сущности UsersDomainLogins.
В данном примере я рассказал, как реализовать работу приложения Silverlight 5 с Entity Framework 5 посредством DbContext и с помощью Open RIA Services.
Данная технология пришла на смену WCF RIA Services которая не поддерживает Entity Framework 6 и даже 5.
На этом раскланиваюсь.
Комментариев нет:
Отправить комментарий