问题描述
异常:对数据库所做的更改已成功提交,但在更新对象上下文时出错。此ObjectContext可能处于不一致状态。内部异常消息:AcceptChanges无法继续,因为该对象的键值与ObjectStateManager中的另一个对象冲突。请在调用AcceptChanges之前,确保键值是唯一的。循环插数据第一个不会报错,第二条才报错问题肯定出在内存中有ObjectStateManager版本值不一样的对象,可是问题出现在这就奇怪了,我明明是实例化的一个新实体啊,为什么啊为什么查看数据表,数据确实批量上去了,就是在AcceptChanges方法提交时报个异常
解决方案
解决方案二:
急!!!!在线等
解决方案三:
解决方案四:
是不是你的表包含外键,如果包含外键添加的时候需要设置外键属性
解决方案五:
主键未赋值?今天遇到这个问题了,EF+Oracle开发,主键使用自增ID,结果就报错了,后面给每条数据设置ID,就没问题了。
解决方案六:
看看你的框架结构是不是改过?和数据库的不一致了。
解决方案七:
引用楼主wwwiii520的回复:
异常:对数据库所做的更改已成功提交,但在更新对象上下文时出错。此ObjectContext可能处于不一致状态。内部异常消息:AcceptChanges无法继续,因为该对象的键值与ObjectStateManager中的另一个对象冲突。请在调用AcceptChanges之前,确保键值是唯一的。循环插数据第一个不会报错,第二条才报错问题肯定出在内存中有ObjectStateManager版本值不一样的对象,可是问题出现在这就奇怪了,我明明是实例化的一个新实体啊,为什么啊为什么查看数据表,数据确实批量上去了,就是在AcceptChanges方法提交时报个异常
我也遇到了这个问题了,我也不知道该如何解决,我是在触发器中完成的这些功能,但是严重的影响到了性能。具体你可以看报错。我们的每个新生成的查询返回的实体,都被保存在Context的容器中的缓存中(也就是ObjectContext),则ObjectStateManager负责管理它们的状态。而AcceptAllChangesAfterSave:就是把数据保存到数据库以后重置实体的状态。这就说明缓存的时候就是不对的,所以在ObjectStateManager分配的时候会冲突,并且无法重置实体状态。
时间: 2024-08-03 02:42:41