Обновление нескалярных объектов в Entity Framework v4
В настоящее время я обновляю скалярные свойства объекта-кандидата следующим образом:
public Candidate EditCandidate(Candidate candidateToEdit)
{
_entities.Candidates.Attach(new Candidate { ID = candidateToEdit.ID });
_entities.Candidates.ApplyCurrentValues(candidateToEdit);
//update candidate.contact here somehow
_entities.SaveChanges();
return candidateToEdit;
}
Это только обновляет скаляры кандидата, так как это то, что делает ApplyCurrentValues. Мне также нужно обновить объект кандидат.контакт, в настоящее время кажется, что единственный вариант - это получить текущего кандидата в базе данных через идентификатор кандидата, захватить идентификатор контакта и обновить его таким образом, но я не уверен что это "лучший" способ сделать это. Кандидат oTeEdit.contact имеет значения, но не идентификатор, поскольку, на мой взгляд, он не связан. Я изменяю на контактный контекст и делаю это точно так же, как я обновил кандидата?
Обновление: решение
Основываясь на ответе Дэна ниже.
_entities.Candidates.Attach(candidateToEdit);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit.contact, EntityState.Modified);
_entities.SaveChanges();
1 ответ
Поскольку Кандидат ТоЭдит имеет контактную информацию, я думаю, вы можете сделать это следующим образом. Это предполагает, что ваши _entities являются контекстом объекта для EF.
public void Update(Candidate candidateToEdit)
{
_entities.Candidates.Attach(candidateToEdit);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
_entities.SaveChanges();
}
Я думаю, что сохраняет все свойства навигации...