zoukankan      html  css  js  c++  java
  • 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);
    
                    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;
    
                }
    
            }
    

    问题解决。

  • 相关阅读:
    数组
    Fiddler抓手机APP包
    APP测试注意点-安装卸载与运行
    【转】查看iOS崩溃日志
    Monkey 命令
    python del 函数
    探索性测试方法
    解决5037端口占用的方法
    App测试Android的闪退总结
    Jenkins邮件配置
  • 原文地址:https://www.cnblogs.com/darrenji/p/4075206.html
Copyright © 2011-2022 走看看