Очень распространено иметь хранимую процедуру, возвращающую данные из нескольких таблиц.Тип возврата не подходит ни под один из типов сущностей (таблицы).Поэтому, если мы определим Complex Type как возвращаемую коллекцию объектов из вызова хранимой процедуры, он станет довольно мощным инструментом для разработчика.
Следуя этим шагам, я успешно добился конфигурации сложного типа в образце базы данных AdventureWorks.,1. Обратитесь к изображению и убедитесь, что импортированы сохраненная процедура и функция.2. Добавьте имя доменной службы как AdventureDomainService.3. Теперь пришло время определить инфраструктуру служб RIA для идентификации моего сложного типа в качестве типа объекта.Чтобы сделать это, нам нужно идентифицировать аннотацию [Key].Типы сущностей обеспечивают структуру данных для модели данных приложения, и в соответствии с дизайном каждый тип сущности необходим для определения уникального ключа сущности.Мы можем определить ключ для одного свойства или набора свойств в файле класса метаданных.CTEmployeeManagers.CTEmployeeManagersMetadata))] публичный частичный класс CTEmployeeManagers {
internal sealed class CTEmployeeManagersMetadata
{
private CTEmployeeManagersMetadata() { }
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int ManagerID { get; set; }
public string ManagerFirstName { get; set; }
public string ManagerLastName { get; set; }
}
}
Определите метод службы Домена, чтобы возвращать коллекцию объектов / сущностей для заполнения сетки Silverlight или любых других элементов управления, потребляющих данные.
public IQueryable<CTEmployeeManagers> GetEmployeeManagers(int empId)
{
return this.ObjectContext.GetEmployeeManagers(empId).AsQueryable();
}
Мы определяем IQueryable, еслимы должны извлекать записи из источников данных, таких как SQL, тогда как мы определяем IEnumerable, если мы должны извлекать записи из коллекций памяти, словарей, списков массивов и т. д.
Скомпилируйте серверную часть для генерации клиентского прокси.
На стороне Silverlight откройте MainPage.xaml или, где бы ни была размещена сетка данных, затем добавьте следующие пространства имен:
с использованием System.ServiceModel.DomainServices.Client;используя SLBusinessApplication.Web;использование SLBusinessApplication.Web.Services;
..
Загрузка данных и отображение:
открытый частичный класс MyPage: Page {AdventureDomainContext ctx = new AdventureDomainContext ();public MyPage () {InitializeComponent ();LoadOperation loadOp = this.ctx.Load (this.ctx.GetEmployeeManagersQuery (29));myGrid.ItemsSource = loadOp.Entities;}
// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
Это все, что нужно сделать.