Обновления модели для содержащейся коллекции не сохраняются в БД при сохранении родительского объекта? - PullRequest
3 голосов
/ 24 октября 2011

Проблема: Дочерняя модель коллекции в MVC3 и Entity Framework 4.1 должным образом обновляется в модели с помощью действия Изменить, но значения не сохраняются в БД.

Обзор: - Модель объекта Person содержит объект CaseRef's - Обновления свойств Person сохраняются в БД в db.SaveChanges (), но внутренние обновления свойств CaseRef коллекции не сохраняются. - Все значения правильно привязываются / отображаются при входе в HttpPost ActionResult Edit (), поэтому модель успешно обновляется из отправки формы (представление редактирования).

Модель:

public  class Person
{
    public Person()
    {
        this.CaseRefs = new HashSet<CaseRef>();
    }  
   // <...more properties here...>
    public string Name { get; set; }
    public int UserId {get; set}

    public virtual ICollection<CaseRef> CaseRefs { get; set; }     
}

public  class CaseRef
{
   // <...more properties here...>
   public int DescId { get; set; }  
   public virtual Person Person { get; set; }  
}

Контроллер - Правка (Пост)

    [HttpPost]
    public ActionResult Edit(Person p)
    {
        if (ModelState.IsValid)
        {
            // NOTE: At this point all fields from Edit form have been saved to the model
            //       specifically the internal CaseRefs Collection value updates.
            db.Entry(p).State = EntityState.Modified;

            // This is saving changes to Person.Name but not saving changes to the updated
            // values in CaseRefs collection
            db.SaveChanges();  
            return RedirectToAction("Index");
        }

1 Ответ

6 голосов
/ 24 октября 2011

Настройка db.Entry(p).State = EntityState.Modified; Вы устанавливаете только родительский объект для изменения.Чтобы также изменить навигационные свойства, вы должны пометить их как измененные.

Так что-то вроде: p.CaseRefs.ForEach(c => db.Entry(c).State = EntityState.Modified);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...