EntityFramework批量插入数据遇到一个百思不得解的问题

wwwiii520 2013-07-11 03:09:56
异常:对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可
能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与
ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键
值是唯一的。

循环插数据第一个不会报错,第二条才报错
问题肯定出在内存中有ObjectStateManager版本值不一样的对象,可是问题出现在这就奇怪了,我明明是实例化的一个新实体啊,为什么啊为什么

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

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧