尝试更新数据库时,此代码给出错误


  错误:带有键的对象
  匹配提供的对象的键
  在中找不到
  ObjectStateManager。验证
  提供的对象的键值
  匹配对象的键值
  必须应用哪些更改。


 public void UpdateAccuralSettings(SystemTolerance updatedObject)

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

    }

最佳答案

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();
}

10-02 09:44