Fork me on GitHub

ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象

在使用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;
        }
posted @ 2016-01-06 18:01  迁梦余光  阅读(212)  评论(0编辑  收藏  举报