更新Entity Framework v4中的非标量实体

时间:2010-09-15 21:00:08

标签: entity-framework entity-framework-4 entity

目前我正在更新候选对象的标量属性,如下所示:

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的作用。我还需要更新candidate.contact对象,目前似乎唯一的选择是通过candidateToEdit ID获取数据库中的当前候选者,获取联系人ID并以这种方式更新它,但我不确定什么是“最好”的方法来做到这一点。 candidateToEdit.contact具有值但不具有ID,因为它不会在我的视图中被绑定。我是否更改了联系人上下文,并且与更新候选人的方式完全相同?

更新:解决方案

基于下面的Dan's answer

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

1 个答案:

答案 0 :(得分:4)

由于candidateToEdit有联系信息,我认为你可以这样做。假设您的_entities是EF的对象上下文。

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

我认为保存所有导航属性......