尝试通过实体框架更新数据库对象时,对象已存在错误

Bar*_*cer 0 c# entity-framework asp.net-mvc-4

我正在使用以下方法尝试使用实体框架更新对象:

public static void UpdateItem(Item updatedObject) {

  using (var context = new DbContext())
  {
    context.MyObjectsPropertys.Attach(updatedObject);
    context.Entry(updatedObject).State = EntityState.Modified;
    context.SaveChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

我在附件上收到错误消息:

 An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
Run Code Online (Sandbox Code Playgroud)

如果我尝试将Attach调用更改为Add调用(具有相同键的对象已经存在objectstatemanager),则会得到:

Cannot insert duplicate key in object 'database.Table'. The duplicate key value is (AttributeValue). The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

我发现了很多与此错误有关的问题,但是在我的情况下,没有任何答案可以正常工作:

我也尝试删除“ Attach”语句,并按照Error的建议使用相同的键DbContext进行多个对象的状态更改,但这也不起作用。

对我而言,最令人沮丧的是,这与成功更新解决方案中其他内容的语句序列完全相同。

Moh*_*our 5

您必须检查上下文是否已跟踪具有相同键的实体,并修改该实体而不是附加当前实体:

var trackedEntity = context.MyObjectsPropertys.Find(updatedObject.Id);
context.Entry(trackedEntity).CurrentValues.SetValues(updatedObject);
context.Entry(trackedEntity).State = EntityState.Modified;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)