使用Oracle ODP.NET在.net实体框架中调用SaveChanges时,出现InvalidOperationE
本文关键字:SaveChanges 调用 InvalidOperationE 出现 框架 ODP Oracle NET 实体 net 使用 | 更新日期: 2023-09-27 18:08:23
我有一个代码,从数据库中删除一些实体,然后重新插入更新的行。方案如下:
db.BeginTransaction();
try
{
//Delete some rows
db.SaveChanges();
//Add updated rows
db.SaveChanges();
db.Commit()
}
catch
{
db.Rollback();
throw;
}
在某些情况下,但不是一般情况下,我在第二次SaveChanges之后出现以下错误:
对数据库的更改已成功提交,但出现错误在更新对象上下文时发生。ObjectContext可能是处于不一致的状态。内部异常消息:AcceptChanges无法继续,因为对象的键值与另一个键值冲突ObjectStateManager. object。确保键值是
数据库是Oracle,我使用ODP。. NET Oracle提供程序,使其与实体框架一起工作。更新后的表使用复合主键
长话短说-它在数据中复制复合主键值
一般情况下,该错误表示对象上下文或上下文与数据库之间出现了某种不一致。这通常是由于在此期间修改了一些数据(不是EF),例如通过存储过程,因此上下文变得过时了。
然而,在这种情况下,问题是在其他地方。即组合键。在数据中很容易忽略它,但如果我们有主键,它由三个,四个,五个值组成,并且在要更新的行列表中的某个地方,键是重复的,实体框架将抛出该异常。