Обновление нескалярных объектов в Entity Framework v4 - PullRequest
3 голосов
/ 16 сентября 2010

В настоящее время я обновляю скалярные свойства объекта-кандидата следующим образом:

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. Мне также нужно обновить объект кандидат.контакт, в настоящее время кажется, что единственный вариант - это получить текущего кандидата в базе данных через идентификатор кандидата, захватить идентификатор контакта и обновить его таким образом, но я не уверен что это «лучший» способ сделать это. Кандидат ToTed.contact имеет значения, но не идентификатор, так как, на мой взгляд, он не привязан. Я изменяю на контактный контекст и делаю это точно так же, как я обновил кандидата?

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

Основано на ответе Дана ниже.

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

1 Ответ

4 голосов
/ 16 сентября 2010

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

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

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

...