Объекты с самостоятельным отслеживанием EF4

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

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

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

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

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


person Martin Robins    schedule 14.03.2011    source источник


Ответы (2)


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

  1. сначала прикрепите его к контексту
  2. ChangeObjectState — принимает перечисление EntityState: Added/Modified/Deleted
  3. Сохранить изменения

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

person scotty    schedule 29.06.2012

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

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

person Ladislav Mrnka    schedule 14.03.2011