Навігація

  • Домашня
  • Продукти
  • Послуги
  • Реєстрація
  • Новини
  • Статті
  • Контакти

Логінування

Did you lose your password?

Останні новини

2010-05-06 23:30

«Яндекс» запустив новинну карту

«Яндекс» запустив новинну карту Новинна мапа представляє собою графічне відображення активності регіонів в інформаційній картині дня. Користувачі можуть переглядати новинну мапу Росі...

Детальніше »

2010-05-06 23:25

Інтернет: Google в Україні: порталів вистачає, потрібен сервісний бізнес.

В українському сегменті Інтернет уже зайняті ніші порталів і сайтів новин, гравців вистачає. Перспективніше сьогодні створювати сервісний бізнес, який

Детальніше »

Українська > Статті > SilverLight, .Net Ria Services та зв'язок many to many

SilverLight 4, .Net Ria Services та зв'язок many to many

Почавши працювати з SilverLight 4 та .Net Ria Services, одною з найперших проблем з якою я зіткнувся це була проблема організації зв'язку many to many.
На серверному рівні все було ОК. Тобто генератор Entity Framework (EF) створив звязок many to many, і відображав його в вікні Model Browser без проблем. Але чомусь на клієнтську сторону (SilverLight) дані не передавались. Після пошуку в google я натрапив ось на такий висновок щодо підтримки звязку many to many в .Net Ria Services: "RIA Services does not support the many to many relationship directly". Отже як організувати звязок many to many в .Net Ria Services? А все просто, нам необхідно замінити один з'вязок many to many двома one to many звязками. Давайте перйдемо до конкретного прикладу.
Для початку створіть базу даних з наступною структурою:

Як видно з рисунка між таблицями Roles та Users є класичний many to many звязок. Поле Note в таблиці UsersRoles було додано для того щоб генератор EF згенерував три класи (Users, Roles та UsersRles) з звязками one to many. Якщо забрати це поле то генератор EF створить тільки два класи (Roles та Users) з звязком many to many, що нам зовсім не потрібно (бо як я вже казав вище .Net Ria Services не підтримує напряму звязок many to many).

Далі створимо новий проект Silver Light Business Application (я назвав його NRSBusinesApp). В Solution Explorer в проекті NRSBusinesApp.Web клікаємо правою клавішею миші по папці Models і з контекстного меню вибираємо пункт: "Add -> New Item...". В вікні що появилось, виберіть Installed Templates -> Data -> ADO .NET Entity Data Model, перейменуйте з Model1.edmx на ModelNRS.edmx і натисність Add. В вікні що появилось вибthsnm "Generate from database" і натисніть "Next >", тепер перед вами має появитися вікно створення коннекту до вашої бази даних, якщо у вас ще немає створеного конекту то створіть його як показано нижче на рисунку:
Після створення коннекту, тиснемо "Next >", в результаті у нас появиться вікно "Entity Data Model Wizard", в якому ми повинні вибрати таблиці з яких будуть створені наші бізнес обєкти, та натиснути "Finish":

Після всіх цих маніпуляцій у вас має бути блиблизно така модель даних:


Далі перебудуйте проект (Build - > Rebuild Solution).
Тепер нам потрібно створити рівень доступу до нашої моделі даних. Для цого в Solution Explorer в проекті NRSBusinesApp.Web клікаємо правою клавішею миші по папці Services і з контекстного меню вибираємо пункт: "Add -> New Item...". В вікні що появилось, виберіть Installed Templates -> Web-> Domain Service Class, перейменуйте з DomainService1.cs на NRSDomainService.cs і натисність Add. В вікні Add New Domain Service Class відмічаємо галочками записи в стовпцях Entities та Enable Editing та натисніть "OK", як показано на рисунку:


Ми тільки що створили рівень доступу до нашої моделі даних. На рисунку нижче ви можете побачити створені генератором файли:

Відкрийте файл NSRDomainService.metadata.cs. Знайдіть в ньому клас "internal sealed class UsersMetadata" і над полем "UsersRoles" добавте атрибут [Include]:

Аналогічно зробіть в класі: "internal sealed class UsersRolesMetadata":


Відкрийте файл NSRDomainService.cs. Знайдіть в ньому метод GetUsers() та змініть його як показано нижче:

Перебудуйте проект. Тепер у вас все готово щоб передати інформацію про користуачів та їх ролі до SilverLight клієнта.
Відкрийте Home.xaml в SilverLight проекті NRSBusinesApp (Views -> Home.xaml). З вікна Data Sources перетягніть Users та Users Roles на сторінку Home.xaml. Додайте в базу даних декілька ролей користувачів та звязків між ними. Запустіть проект. У вас мало б вийти щось подібне:


Тепер нам потрібно попрацювати над відображенням ролей користувача (щоб відображались тільки ролі вибраного користувача). Для цього перейдемо на Home.xaml, знайдемо обєкт usersDataGrid і додамо до нього обробник подій "SelectionChanged". В обробнику подій додайте наступний код:


В xmal коді змініть userRolesDataGrid так як показано нижче:


Перекомпілюйте та запустіть проект. У мене вийшов ось такий результат:


Автор: Віктор Миронович
Завантажити приклад до статті load
*
*
Будь ласка, порахуйте 3 + 6.*

Назад

Головна Продукти Послуги Підтримка Про нас

Copyright 2010 ProMicroTech. All Rights Reserved. Веб студія: створення сайту

замовити сайт