ERROR 对数据库所做的更改已成功提交,但在更新对象上下文时出错。

baidu_15366657 2014-08-29 10:24:01
ERROR 对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
...全文
863 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我的savechanges里面没有有参数的方法呢?只有一个savechanges
baidu_15366657 2014-09-26
  • 打赏
  • 举报
回复
引用 21 楼 u012478228 的回复:
我没有遇见这个问题,我是第一次用oracle数据库开发,代码是用sql版本改的oracle版。
oracle 不是特别喜欢,官方说是兼容,其实就是某些方面兼容,可是还是有好多用户,唉
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
我也是同样的问题,EF 连接 oracle 对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 21 楼 u012478228 的回复:
我没有遇见这个问题,我是第一次用oracle数据库开发,代码是用sql版本改的oracle版。
要是不是用的EF那就好办多了,那很简单的。
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
我没有遇见这个问题,我是第一次用oracle数据库开发,代码是用sql版本改的oracle版。
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 16 楼 u012478228 的回复:
ok 成功了。谢谢
之前我提这个问题的时候,也不知道为啥,也没人能回答我,只好自己研究了,研究好长时间才发现是savechange它本身的问题,但是这个我觉得不是根本问题,EF6还是挺好的,兼容了好多,但是我用不了,唉,怪我太菜了,都没人愿意理我。
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 17 楼 u012478228 的回复:
还有几是EF 连接oracle的时候,为什么主键id总是获取不到啊?
我是吧所有需要的操作全用触发器完成的,而且oracle的插入式触发器没有after,这样的话触发器也不太方便,而且还会占一定的内存,如果你那个东西不太大,也可以用触发器来弄,理论上来说速度会减慢,但是我用的时候速度还可以,没有想象的慢,可以用,就是会占一些内存。
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 17 楼 u012478228 的回复:
还有几是EF 连接oracle的时候,为什么主键id总是获取不到啊?
我也不太清楚,但是我觉得不应该获取不到吧,我做的是3数据库支持,mysql和sqlserver都挺好的,就是到了oracle就这德行,你可以看savechange那地方你的主键的值,那个值一直不会变,所以就会报错,但是如果你用这种方法,数据保存到数据库以后就不会重置实体的状态,我这么做之后无法更新,不知道你碰到这个问题了没有。
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
还有几是EF 连接oracle的时候,为什么主键id总是获取不到啊?
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
ok 成功了。谢谢
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 14 楼 u012478228 的回复:
public bool CreateRoleObj(List<U_ROLEOBJECT> roleobject) { if (roleobject != null) { //添加实体 foreach (U_ROLEOBJECT roleobj in roleobject) { DBManager.U_ROLEOBJECT.AddObject(roleobj); } //保存,返回成功行数 int c = DBManager.SaveChanges();// 这里报错 //判断 if (c > 0) { return true; } else { return false; } } else { return false; } }
savechange() 改成SaveChanges(SaveOptions.DetectChangesBeforeSave) 试一下
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
public bool CreateRoleObj(List<U_ROLEOBJECT> roleobject) { if (roleobject != null) { //添加实体 foreach (U_ROLEOBJECT roleobj in roleobject) { DBManager.U_ROLEOBJECT.AddObject(roleobj); } //保存,返回成功行数 int c = DBManager.SaveChanges();// 这里报错 //判断 if (c > 0) { return true; } else { return false; } } else { return false; } }
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 11 楼 u012478228 的回复:
Q:2661293555 帮忙看一下
在这里说吧,公司上不了QQ
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 7 楼 baidu_15366657 的回复:
[quote=引用 6 楼 u012478228 的回复:] 我也是同样的问题,EF 连接 oracle 对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
是不是有一个字段总是一个值,值不会变才导致这样的。你可以吧savechange()的属性改一下,就是把存储之后重置的属性去掉,但是还是会出现问题,你可以试一下。之后我是在oracle数据库中添加了触发器,才能存储数据,但是由于重置取消了,可能会导致你修改数据的时候还是会出错。不过我看官方说oracle6有一个方法可以解决,但是我用的是vs2010用不了oracle6,这个问题一直也没解决。[/quote] 不好意思,在想别的事就大意了,应该是EF6 我看了一下EF6 有个方法貌似可以解决,但是我用的vs2010,用不了EF6,所以只是觉得那个方法可行。
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
Q:2661293555 帮忙看一下
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 9 楼 u012478228 的回复:
我用的vs2010 连接oracle11G
不好意思 说错了 EF6 有个方法 你可以查一下
GYT_ 2014-09-25
  • 打赏
  • 举报
回复
我用的vs2010 连接oracle11G
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 6 楼 u012478228 的回复:
我也是同样的问题,EF 连接 oracle 对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
最好能你能看看的问题到底 出在哪里了,把你的代码发出来我看看也行。
baidu_15366657 2014-09-25
  • 打赏
  • 举报
回复
引用 6 楼 u012478228 的回复:
我也是同样的问题,EF 连接 oracle 对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
是不是有一个字段总是一个值,值不会变才导致这样的。你可以吧savechange()的属性改一下,就是把存储之后重置的属性去掉,但是还是会出现问题,你可以试一下。之后我是在oracle数据库中添加了触发器,才能存储数据,但是由于重置取消了,可能会导致你修改数据的时候还是会出错。不过我看官方说oracle6有一个方法可以解决,但是我用的是vs2010用不了oracle6,这个问题一直也没解决。
baidu_15366657 2014-08-29
  • 打赏
  • 举报
回复
菜鸟,求指教!
加载更多回复(4)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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