2011-12-23 3 views
3

У меня есть два объекта: счет-фактура и счет-фактура.Entity Framework: Связанные с обновлением объекты

Счет-фактура имеет член счета-фактуры.

Когда я создаю объект obcjet, он работает так, как ожидалось.

Структура вставляет строки счета-фактуры и счета-фактуры в базу данных.

$.ajax({ 
    url: "/Invoices/Index", 
    data: JSON.stringify({ 
     InvoiceDetails: [{ 
      Description: "1" 
     }, { 
      Description: "2" 
     }] 
    }), 
    contentType: "application/json", 
    type: "POST" 
}); 

    [ActionName("Index")] 
    [HttpPost] 
    public JsonResult Post(Invoice invoice) 
    { 
     db.Invoices.AddObject(invoice); 
     db.SaveChanges(); 
     ... 

Я также хотел бы обновить счет-фактуру и связанные с ней счета-фактуры.

$.ajax({ 
    url: "/Invoices/Index/1", 
    data: JSON.stringify({ 
     Id: 1, 
     InvoiceDetails: [{ 
      Id: 1, 
      Description: "1*" 
     }, { 
      Id: 2, 
      Description: "2*" 
     }] 
    }), 
    contentType: "application/json", 
    type: "PUT" 
}); 

    [ActionName("Index")] 
    [HttpPut] 
    public JsonResult Put(Invoice invoice) 
    { 
     db.Invoices.Attach(invoice); 
     db.ObjectStateManager.ChangeObjectState(invoice, EntityState.Modified); 
     db.SaveChanges(); 
     ... 

Но структура обновляет только счет-фактуру.

Как я могу также обновить связанные объекты?

Моя модель выглядит следующим образом

enter image description here

EDIT: Решение http://michele.berto.li/update-of-an-object-and-related-records-with-backbonejs-and-net-mvc

ОБНОВЛЕНО LINK http://michele.berto.li/update-of-an-object-and-related-records-with-backbone-js-and-net-mvc/

ответ

1

Когда вы вызываете ChangeObjectState, вы меняете состояние одного объекта, отношения остаются в неизмененном состоянии. Поэтому, если вы только изменяете существующие данные счета-фактуры, вы можете просто перебрать эти данные и установить их в измененные состояния. Если вы также можете добавить или удалить данные, это будет much more complicated, и вам придется вручную синхронизировать состояние с запросом с состоянием в базе данных (загрузка счета-фактуры с информацией сначала из базы данных по предложению @Hammerstein) или использовать какое-либо соглашение, чтобы найти, какие данные должны быть установленным для удаления или добавления состояния без проверки его в базе данных.

+0

У меня есть элемент управления 'HttpPost', который обрабатывает представление сложной формы, состоящей из объекта и его навигационных свойств, которые могут быть коллекциями с некоторыми элементами, отсутствующими из-за удаления, некоторыми новыми элементами, некоторыми измененными и то же самое с одним объектом nav. свойства, которые могут быть либо нулевыми (свойство FK имеет значение NULL), либо изменено на новый объект, либо изменены существующие, либо многие другие параметры. Есть ли единый способ управления связанными объектами в EF ??? Все это начинает путаться с отсутствием четкого и единого способа выполнения таких операций. – Shimmy

+0

любые новости по этому вопросу, как и в 2015 году? Любой способ легко обновить весь график, включая удаление связанных объектов? – Shimmy

0

Я не работал с Приложить много, как правило, Я запрашиваю базу данных, обновляю запись и пр. изменяются. Но я считаю, что выставленный вами счет-фактура не имеет такой же связи с детализацией счета-фактуры. Вам нужно будет вытащить эту запись, обновить ее и затем сохранить изменения.

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