在使用EF更新数据的时候,报如下错:
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
原因是:在EF上上下文中不允许存在2个具有相同键的实体。Update
部分修改如下:
public Product Update(Product item)
try
if (item == null)
throw new ArgumentException("Product不能为null");
var entry = db.Entry(item);
{
var set = db.Set<Product>();
Product attachedProduct = set.Local.SingleOrDefault(p => p.Id == item.Id);
if (attachedProduct != null)
var attachedEntry = db.Entry(attachedProduct);
attachedEntry.CurrentValues.SetValues(item);
else //如果不在当前上下文追踪
entry.State = EntityState.Modified;
}
db.SaveChanges();
return item;
catch (Exception)
throw;
}