В настоящее время я обновляемое скалярных свойствах объекта-кандидата, как так:Update нескалярные объекты в 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. Мне также необходимо обновить объект candid.contact, в настоящее время кажется единственной возможностью получить текущий кандидат в базе данных с помощью идентификатора кандидатаToEdit, получить идентификатор контакта и обновить его таким образом, но я не уверен что «лучший» способ сделать это. У кандидатаToEdit.contact есть значения, но не ID, поскольку он не привязан к моему представлению. Переключиться на контактный контекст и сделать это точно так же, как я обновил кандидата?
Update: Решение
Основываясь на Dan's answer ниже.
_entities.Candidates.Attach(candidateToEdit);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit.contact, EntityState.Modified);
_entities.SaveChanges();
Вы используете Entities саморегулирующихся? –