ObjectContext从分离状态更新对象

时间:2011-09-01 01:40:16

标签: entity-framework c#-4.0 objectcontext

我有一个带有更新方法的ObjectContext。该方法将通用对象作为参数。我需要将此对象附加到ObjectContext并使用对象具有的更改来更新数据库。例如,我创建了一个与数据库中具有相同密钥和实体的新对象,但某些字段不同。我想将对象附加到数据库中的相应实体,并保存新对象所具有的更改。这是我在Update方法中的内容:

public void Update(BaseObject data, entitySetName)
{
    AttachTo(entitySetName, data);
    Refresh(RefreshMode.ClientWins, data);
    SaveChanges();
}

刷新后,数据将被数据库中的字段覆盖。退出刷新也不会更新数据库记录。我错过了一步吗?

2 个答案:

答案 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();
}
相关问题