实体框架更新问题应用当前值时

时间:2011-07-07 21:05:45

标签: c# entity-framework-4

此代码在尝试更新数据库时出错

  

错误:具有键的对象   匹配提供的对象的键   无法找到   ObjectStateManager。验证   提供的对象的键值   匹配对象的键值   必须应用哪些更改。

 public void UpdateAccuralSettings(SystemTolerance updatedObject)

    {
        _source.SystemTolerances.ApplyCurrentValues(updatedObject);
        _source.SaveChanges();

    }

2 个答案:

答案 0 :(得分:7)

ApplyCurrentValues仅在实体首次从数据库加载时才起作用(如果你没有使用你用来加载它的相同上下文,那么很可能不是这样):

public void UpdateAccuralSettings(SystemTolerance updatedObject)
{
    _source.SystemTolerances.Single(x => x.Id == updatedObject.Id);
    _source.SystemTolerances.ApplyCurrentValues(updatedObject);
    _source.SaveChanges();
}

如果您只想保存当前数据而不重新加载实体:

public void UpdateAccuralSettings(SystemTolerance updatedObject)
{
    _source.SystemTolerances.Attach(updatedObject);
    _source.ObjectStateManager.ChangeEntityState(updatedObject, EntityState.Modified);
    _source.SaveChanges();
}

答案 1 :(得分:1)

可能是你的model.edmx不是最新的? //数据库已更改?

取决于你的设置/环境我认为只有一个.SaveChanges()在右边的Entitie-Context(从中创建了updatedObject)将在db中进行更新。

所以我只是_source.SaveChanges();

问候