EF4 Самостоятельно отслеживаемые объекты - PullRequest
0 голосов
/ 14 марта 2011

В настоящее время я пытаюсь использовать STE в n-уровневом сценарии. У меня есть служба WCF, которая позволяет мне получать граф объектов и / или обновлять объекты вместе с клиентским (WPF) приложением, которое позволяет мне редактировать аспекты этого графика и отправлять изменения обратно в службу.

Моя проблема в этом; График объектов, которые я получаю, довольно большой - иногда включая изображения - но мои обновления минимальны. Однако когда я отправляю обновление, весь график отправляется обратно в службу из-за связей между объектами.

Например; учитывая сценарий Customer / Order / OrderDetail: я получаю Customer с его заказами и связанными OrderDetails (3 уровня). Затем я обновляю один OrderDetail, чтобы возможно изменить количество. Я отправляю OrderDetail для обновления с помощью метода WCF, который принимает объект OrderDetail, но сериализация следует свойствам отношений через Order для Заказчика и сериализует не только измененный OrderDetail, но и все Orders, OrderDetails и клиента.

Как я могу остановить передачу всего этого назад, когда параметр вызова службы сериализован, и просто передать обратно объект для обновления, не следуя отношениям?

Все примеры, которые я могу найти для STE (а их пока не так много), по-видимому, предназначены для фактической передачи всех связанных объектов (таких как пример блога / публикации в сети).

Ответы [ 2 ]

1 голос
/ 29 июня 2012

Как вы знаете, ObjectStateManager управляет статусами объектов, особенно в n-связанных приложениях, для обновления определенных объектов, используйте следующие методы:

  1. сначала присоедините его к контексту
  2. ChangeObjectState- принимает перечисление EntityState: добавлено / изменено / удалено
  3. SaveChanges

проверить ссылку: http://msdn.microsoft.com/en-us/magazine/ee321569.aspx

0 голосов
/ 14 марта 2011

Если вы не хотите, чтобы все данные передавались, вы должны работать с меньшим набором. Таким образом, если вы по умолчанию получаете Customer + весь его заказ + все детали заказа, то это ваш рабочий набор. Если вы хотите работать только с одним ордером, создайте операцию, чтобы получить только этот и его детали.

Это как-то связано с совокупными корнями. Порядок является общим корнем для элементов заказа, поскольку работа с одним элементом без его заказа не имеет особого смысла. Но работа с Заказом без его клиента, вероятно, возможна, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...