Проблема: Дочерняя модель коллекции в 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");
}