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);
    
                    {
    
                        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;
    
            }
    
  • 相关阅读:
    vector存入共享内存(了解)
    vector内存分配
    关于传值的小问题
    c++11 lambda(匿名函数)
    std::function,std::bind复习
    项目分析(人物上线消息)
    mongo 1067错误
    随笔1
    随笔
    交换机的体系结构和各部件说明
  • 原文地址:https://www.cnblogs.com/tianboblog/p/5106519.html
Copyright © 2011-2022 走看看