У меня есть приложение ASP.NET MVC 3, использующее Entity Framework 4 для обработки доступа к данным.
Структура объекта My View Model выглядит следующим образом:
public class OrderViewModel
{
public int Id { get; set; }
/* ... */
public List<OrderLineItemViewModel> LineItems { get; set; }
}
public class OrderLineItemViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
И моя модель Entity Framework выглядит следующим образом:
public class Order
{
public int Id { get; set; }
/* ... */
public List<OrderLineItem> LineItems { get; set; }
}
public class OrderLineItem
{
public int Id { get; set; }
public string Name { get; set; }
}
То, с чем я борюсь, это как редактировать существующий ордер. Моя функция контроллера преобразует модель родительского представления в объект Order, а также преобразует дочерние элементы (OrderLineItemViewModel) в модель объектов (OrderLineItem). Однако после присоединения объекта к ObjectContext он теряет состояние, в котором элементы строки были изменены, добавлены или удалены.
Все примеры, которые я обнаружил для адресов родительских / дочерних отношений, скорее всего, не предусматривают каскадных обновлений для детей, а предпочитают иметь отдельное действие контроллера и представление для обновления дочерней коллекции. Тем не менее, я пытаюсь, чтобы редактирование происходило как одна атомарная операция ... Когда пользователь нажимает «Изменить порядок», чтобы отправить изменения, я хочу обновить поля родительского элемента, а также обработать все новые / удаленные / измененные дочерние элементы. ..
Каков наилучший подход к обработке отслеживания изменений дочерних объектов в Entity Framework при преобразовании из модели представления?
Я попытался добавить IsNew, IsDirty и IsDeleted в ViewModel и Модель, затем вызвал соответствующую функцию для каждого дочернего элемента (Attach, Delete или Add), но я получаю ошибки при попытке добавить, что дочерний элемент уже существует в ObjectStateManager в состоянии UnChanged ...
Спасибо!