0

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

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

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

4

2 回答 2

4

如果进行了任何更改,DetectChanges() 方法会将实体状态更新为已修改。

来自MSDN:“在没有更改跟踪代理的 POCO 实体中,当调用 DetectChanges 方法时,已修改属性的状态更改为 Modified。保存更改后,对象状态更改为 Unchanged。

context.DetectChanges();

此外,您可以将状态设置为已修改,以便您的方法始终尝试更新,无论是否有任何更改:

ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
于 2011-09-01T02:40:30.330 回答
1

简单地使用:

public void Update(BaseObject data, entitySetName)
{
    AttachTo(entitySetName, data);
    ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
    SaveChanges();
}
于 2011-09-01T07:08:58.540 回答