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 约束冲突
EF6.0 下sql语句自动生成的参数类型decimal(18,2)修改