ObjectStateManager 中已存在具有同一鍵的物件。ObjectStateManager 無法跟蹤具有相同鍵的多個物件

Darren Ji發表於2014-11-04

在使用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);
                if (entry.State == EntityState.Detached)
                {
                    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;
            }
        }

問題解決。

相關文章