2015-01-27 2 views
2

У меня есть проект WebApi2 с EF6 CodeFirst. Я также использую AutoMapper для сопоставления между моими моделями и dto. Я не использую OData.Может ли GraphDiff использоваться для частичного обновления простых объектов?

Я пытаюсь найти решение для обработки обновлений сущностей. Поскольку я не использую OData, я не могу использовать Delta, и я бы не хотел использовать JsonPatch.

В моем сценарии:

  1. Клиент посылает данные (как DTO) на сервер
  2. сервер загружает связанный объект/субъект графа из БД с помощью EF
  3. Сервер должен исправить объект с значения DTO
  4. сервера сохраняет исправленный объект и EF должен заботиться о отслеживании изменений

Моего пра oblem лежит с 3.

Могу ли я использовать GraphDiff для исправления сущностей? (Я также буду использовать GraphDiff для обновления сложных графиков). И если я смогу использовать GraphDiff, EF автоматически изменит отслеживание отслеживания?

+0

Вы нашли что-нибудь? Я хочу сделать то же самое. Graphdiff, кажется, игнорирует элементы, которые являются коллекциями и которые вводятся с нулевым значением вместо пустой коллекции. Но если я ставлю значение свойства (например, Name = null), он заменит значение нулевым. – mortb

+0

@mortb Проверьте мой ответ. –

ответ

2

В вышеупомянутом сценарии:

  1. Как указано выше
  2. карты сервера от DTO модели и передает модель в сервис/хранилище
  3. Graphdiff загрузит модель перед обновлением и будет заботиться о измененные свойства соответственно
  4. Graphdiff вернет обновленное Entity

Как для (3):

GraphDiff не выполняет паттерна для каждого объекта. Он обновляет весь объект, перемещая его и создавая diff, а затем объединяет изменения. Поскольку загруженный график отслеживается EF, задача EF - посылать правильные операторы SQL.

+0

-1: Для меня ответ непонятен. Вы хотите сказать, что в шаге 3 GraphDiff «позаботится об измененных свойствах», как патч с Delta ? Если да, то я не могу подтвердить это для моей текущей ситуации. Поскольку, когда я пытался обновить график объекта, все свойства, которые не были предоставлены, были установлены на «null», если это возможно (в противном случае проверки ограничений вступают в силу). Поэтому у меня есть поведение метода «обновления», но не «патч» - что вы скажете? –

+0

@ L4 Я обновил свой ответ. –

+0

Звучит неплохо, ty :) (я вернул -1) –

Смежные вопросы