Обновление нескалярных объектов в 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, поскольку он не привязан к моему представлению. Переключиться в контекст контакта и сделать это точно так же, как я обновил кандидата?

Обновление: решение

На основе Dan answer ниже.

_entities.Candidates.Attach(candidateToEdit);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit.contact, EntityState.Modified);
_entities.SaveChanges();

Ответ 1

Так как у кандидатаToEdit есть контактная информация, я думаю, вы можете сделать это вот так. Это предполагает, что ваши _entities являются объектным контекстом для EF.

public void Update(Candidate candidateToEdit)
{
   _entities.Candidates.Attach(candidateToEdit);
   _entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
   _entities.SaveChanges();
}

Я думаю, что сохраняет все свойства навигации...