目前我正在更新候选对象的标量属性,如下所示:
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();
答案 0 :(得分:4)
由于candidateToEdit有联系信息,我认为你可以这样做。假设您的_entities是EF的对象上下文。
public void Update(Candidate candidateToEdit)
{
_entities.Candidates.Attach(candidateToEdit);
_entities.ObjectStateManager.ChangeObjectState(candidateToEdit, EntityState.Modified);
_entities.SaveChanges();
}
我认为保存所有导航属性......