此代码在尝试更新数据库时出错
错误:具有键的对象 匹配提供的对象的键 无法找到 ObjectStateManager。验证 提供的对象的键值 匹配对象的键值 必须应用哪些更改。
public void UpdateAccuralSettings(SystemTolerance updatedObject)
{
_source.SystemTolerances.ApplyCurrentValues(updatedObject);
_source.SaveChanges();
}
答案 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();
问候