Мне было интересно, есть ли лучший способ кодирования следующего сценария. У меня есть объект Customer, и у каждого объекта Customer есть много заказов. Каждый объект Order имеет как минимум 1 или несколько объектов LineItem.
Моя задача - создать экран с тремя иерархическими сетками: основная сетка отображает клиентов, первая дочерняя сетка отображает заказы, а третья отображает LineItems.
Однако сетки не содержатся друг в друге.
Итак, проблема в следующем:
Если я использую атрибут [Include]
в навигационном свойстве Заказы Заказчика, а также использую атрибут [Include]
в навигационном свойстве LineItems Заказа, то у меня может быть следующий WebService:
public IQueryable<Customer> GetCustomersWithOrdersAndLineItems()
{
return this.ObjectContext.Customers.Include("Orders.LineItems");
}
Это будет хорошо работать. В xaml первая сетка будет привязана к набору сущностей «Клиенты» контекста услуги, вторая - к выбранному элементу первой сетки, а третья - к выбранному элементу третьей сетки.
Это, однако, создает проблему, заключающуюся в том, что у каждого клиента (особенно у постоянных клиентов) может быть много заказов, и каждый заказ имеет как минимум 20+ позиций. (Опять же, это для дистрибьюторского бизнеса ... заказы довольно большие!)
Так есть ли способ сделать это без необходимости в LazyLoad всех данных заказа и LineItem? Кроме того, как бы вы поступили с пейджингом на каждой сетке - отображать максимум 20 записей на сетку?
Я подумал, что на странице загрузки можно взять всех клиентов и привязать их к сетке клиентов. На выбранном товаре изменилось событие - захватить все заказы для клиента. Для выбранного элемента, измененного для сетки заказов - возьмите все LineItems для заказа и привяжите LineItemsGrid к LineItems.
Проблема с этим подходом заключается в том, как сохранить состояние каждой страницы в сетке, если сетки имеют тот же контекст службы, что и источник их элементов? Что я должен сделать, чтобы справиться с изменением текущей страницы внутри каждой сетки?