2016-08-19 7 views
1

Я использую Automapper для копирования данных из моих объектов данных в объекты моей модели.Сохранение обновленной комплексной модели для сложных объектов Entity Framework?

cfg.CreateMap<Customer, CustomerVM>().ReverseMap(); 
cfg.CreateMap<Order, OrderVM>().ReverseMap(); 

Существует навигационное свойство между Order и Customer. Это отлично подходит для отображения сложных объектов на моем представлении.

@Html.EditorFor(a => a.Customer.AccountName) 
@Html.EditorFor(a => a.Notes) 

И объекты, похоже, правильно вернутся в мое сообщение.

[HttpPost] 
public ActionResult SaveOrder(OrderVM order) 
{ 
     if (ModelState.IsValid) 
     { 
      var order2 = AutomapperConfig.MapperConfiguration.CreateMapper().Map<OrderVM, Order>(order); 
      order2.LastEditDate = DateTime.Now; 
      order2.LastEditBy = HttpContext.User.Identity.Name; 
      order2.CreateDate = order.CreateDate; 

      using (var db = new ProofingContext()) 
      {     
       db.Entry(order2).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("index"); 
      } 
     } 

     return View(); 
} 

Когда я шагаю через код в пост действий модель показывает вид обновленные данные во всех связанных с ними объектов. Но когда я сохраняю изменения, я получаю только изменения в порядке, сохраненном в моей БД. Что мне нужно сделать, чтобы сохранить изменения в связанных объектах?

ответ

0

С этой link (Закрепление существующего, но измененный объект в раздел контекста):

Обратите внимание, что если предприятие привязываясь имеет ссылки на другие лиц, которые не отслеживаются, то эти новые субъекты будут в контексте в Unchanged состоянии - они не будут автоматически будут сделаны Modified. Если у вас есть несколько объектов, которые должны быть отмечены Modified, вы должны установить состояние для каждого из этих объектов индивидуально.

В качестве альтернативы существует library (GraphDiff), который позволяет обновлять весь график отдельных объектов. Для получения дополнительной информации см. Это post. В вашем случае это будет:

context.UpdateGraph(order2, map => map.OwnedEntity(x => x.Customer) 
             .OwnedCollection(p => p.Notes)); 
Смежные вопросы