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进行多个对象的状态更改,但这也不起作用。
对我而言,最令人沮丧的是,这与成功更新解决方案中其他内容的语句序列完全相同。
您必须检查上下文是否已跟踪具有相同键的实体,并修改该实体而不是附加当前实体:
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)