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 中已存在具有同一键的对象。的主要内容,如果未能解决你的问题,请参考以下文章

SqlException:INSERT 语句与使用 EF 代码优先 C# 的 FOREIGN KEY 约束冲突

c# EPPlus 修改后关闭期间 Excel 提示保存

EF Core的一个紧急bug,我这样修改

EF6.0 下sql语句自动生成的参数类型decimal(18,2)修改

EF连接Sqlserver2014,使用DBGeography时提示无法加载sqlserverspatial.dll

如何在 EF 上运行 SQL 查询?