使用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提供程序,使其与实体框架一起工作。更新后的表使用复合主键

使用Oracle ODP.NET在.net实体框架中调用SaveChanges时,出现InvalidOperationE

长话短说-它在数据中复制复合主键值

一般情况下,该错误表示对象上下文或上下文与数据库之间出现了某种不一致。这通常是由于在此期间修改了一些数据(不是EF),例如通过存储过程,因此上下文变得过时了。

然而,在这种情况下,问题是在其他地方。即组合键。在数据中很容易忽略它,但如果我们有主键,它由三个,四个,五个值组成,并且在要更新的行列表中的某个地方,键是重复的,实体框架将抛出该异常。