2013-07-12 12 views
0

Попадая следующее сообщение об ошибке при попытке обновить модель и ее коллекцию детской:Обновление Ошибки дочерних объектов

Объекта с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.

[HttpPost] 
public ActionResult Edit(ManufacturerViewModel form, string[] selectedCategories) 
{ 
    if (ModelState.IsValid) 
    { 
     UpdateCategories(selectedCategories, form.Manufacturer); 
     //TODO: Handle links relationship 
     db.Entry(form.Manufacturer).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(form); 
} 

private void UpdateCategories(string[] selectedCategories, Manufacturer mfr) 
{ 
    var categoryIds = selectedCategories.Select(c => int.Parse(c)).ToList(); 
    foreach (var category in GetCategories()) 
    { 
     if (categoryIds.Contains(category.ID)) 
     { 
      if (!mfr.Categories.Contains(category)) 
       mfr.Categories.Add(category); 
     } 
     else 
     { 
      if (mfr.Categories.Contains(category)) 
       mfr.Categories.Remove(category); 
     } 
    } 
} 

ответ

0

Чтобы решить эту проблему, я просто должен был изменить порядок этих строк:

UpdateCategories(selectedCategories, form.Manufacturer); 
db.Entry(form.Manufacturer).State = EntityState.Modified; 

Сейчас:

db.Entry(form.Manufacturer).State = EntityState.Modified; 
    UpdateCategories(selectedCategories, form); 
Смежные вопросы