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