解决方案 »
- 关于 oracle 另一个字符集的问题。。
- oracle安装问题
- 百度的题,有5道,这2道不知道该如何做,请高手帮忙!
- ORACLE中怎么设置,让表的名字只有大写字母
- 求一个简单的查询语句!(即可结贴)
- ORACLE10 如何使用UTL_FILE包将数据写入文本文件?
- 用oracle 怎么存取 大文件。 文件的格式不清楚? 急回!
- ORACLE安装在SCO(UNIX)服务器上而客户端安装在WIN2000下实现CS可以吗?
- 怎么修改Oracle的登陆账户,由本地系统变为Adiminstrator账户?
- oracle 建立range分区,,可以建立list子分区吗,他们用的参数,不同
- db2的存储过程转成oracle的存储过程报错
- 存储过程报错怎么回事?
可以转到.net版块问问
我做的是mysql、sqlserver、oracle三数据库转换,模型是mysql的,两外两个我是只添加了ssdl。但是做到oracle的时候有一个主键的值一直都是0,另外两个就不会出现这种情况。
对数据库所做的更改已成功提交,但在更新对象上下文时出错。此 ObjectContext 可能处于不一致状态。内部异常消息: AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
是不是有一个字段总是一个值,值不会变才导致这样的。你可以吧savechange()的属性改一下,就是把存储之后重置的属性去掉,但是还是会出现问题,你可以试一下。之后我是在oracle数据库中添加了触发器,才能存储数据,但是由于重置取消了,可能会导致你修改数据的时候还是会出错。不过我看官方说oracle6有一个方法可以解决,但是我用的是vs2010用不了oracle6,这个问题一直也没解决。
是不是有一个字段总是一个值,值不会变才导致这样的。你可以吧savechange()的属性改一下,就是把存储之后重置的属性去掉,但是还是会出现问题,你可以试一下。之后我是在oracle数据库中添加了触发器,才能存储数据,但是由于重置取消了,可能会导致你修改数据的时候还是会出错。不过我看官方说oracle6有一个方法可以解决,但是我用的是vs2010用不了oracle6,这个问题一直也没解决。不好意思,在想别的事就大意了,应该是EF6 我看了一下EF6 有个方法貌似可以解决,但是我用的vs2010,用不了EF6,所以只是觉得那个方法可行。
{
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) 试一下
我也不太清楚,但是我觉得不应该获取不到吧,我做的是3数据库支持,mysql和sqlserver都挺好的,就是到了oracle就这德行,你可以看savechange那地方你的主键的值,那个值一直不会变,所以就会报错,但是如果你用这种方法,数据保存到数据库以后就不会重置实体的状态,我这么做之后无法更新,不知道你碰到这个问题了没有。
我是吧所有需要的操作全用触发器完成的,而且oracle的插入式触发器没有after,这样的话触发器也不太方便,而且还会占一定的内存,如果你那个东西不太大,也可以用触发器来弄,理论上来说速度会减慢,但是我用的时候速度还可以,没有想象的慢,可以用,就是会占一些内存。
之前我提这个问题的时候,也不知道为啥,也没人能回答我,只好自己研究了,研究好长时间才发现是savechange它本身的问题,但是这个我觉得不是根本问题,EF6还是挺好的,兼容了好多,但是我用不了,唉,怪我太菜了,都没人愿意理我。
oracle 不是特别喜欢,官方说是兼容,其实就是某些方面兼容,可是还是有好多用户,唉