我有一个带有更新方法的ObjectContext。该方法将通用对象作为参数。我需要将此对象附加到ObjectContext并使用对象具有的更改来更新数据库。例如,我创建了一个与数据库中具有相同密钥和实体的新对象,但某些字段不同。我想将对象附加到数据库中的相应实体,并保存新对象所具有的更改。这是我在Update方法中的内容:
public void Update(BaseObject data, entitySetName)
{
AttachTo(entitySetName, data);
Refresh(RefreshMode.ClientWins, data);
SaveChanges();
}
刷新后,数据将被数据库中的字段覆盖。退出刷新也不会更新数据库记录。我错过了一步吗?
答案 0 :(得分:4)
如果进行了任何更改,DetectChanges()方法会将实体状态更新为已修改。
来自MSDN:“在没有更改跟踪代理的POCO实体中,当调用DetectChanges方法时,已修改属性的状态将更改为”已修改“。保存更改后,对象状态将更改为不变。“
context.DetectChanges();
此外,您可以将状态设置为已修改,因此无论是否有任何更改,您的方法始终都会尝试更新:
ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
答案 1 :(得分:1)
简单地使用:
public void Update(BaseObject data, entitySetName)
{
AttachTo(entitySetName, data);
ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
SaveChanges();
}