c# ef 修改提示,ObjectStateManager 中已存在具有同一键的对象。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# ef 修改提示,ObjectStateManager 中已存在具有同一键的对象。相关的知识,希望对你有一定的参考价值。

异常提示:ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。网上看什么先查出来再update,设置modify啊,都不好用。第一个先查出来不可靠,因为我是封装类的update(如图代码,实体都是TEntity),不能写死的。请教各位我该怎么解决这个问题?

可能之前已经修改了entity的属性,并且objectStageManager中的状态已经是Modified了。 如果此时再次指定Modified会失败。追问

嗯嗯,应该是这个问题,有什么好的解决之道

追答

先判断状态,在修改状态试试

      if (dbContext.Entry(entity).State == System.Data.Entity.EntityState.Detached
                        || dbContext.Entry(entity).State == System.Data.Entity.EntityState.Unchanged)
                    
                        dbContext.Entry(entity).State == System.Data.Entity.EntityState.Modified;

                        // todo: commit
                    
                    // ...

参考技术A 是不是你表的主键有重复的追问

我调试过了,主键是没重复的,这点我打包票,就是没有重复,我才感到奇怪,这才问问知友们有什么好的解决之道

C#中 EF 性能优化

https://www.cnblogs.com/chenwolong/p/7531955.html

  EF使用AsNoTracking(),无跟踪查询技术(查询出来的数据不可以修改,如果你做了修改,你会发现修改并不成功)

以上是关于c# ef 修改提示,ObjectStateManager 中已存在具有同一键的对象。的主要内容,如果未能解决你的问题,请参考以下文章