我从公共api中提取了大量数据,我首先使用EF代码将其转储到内部Oracle数据库中。我在数据库中使用触发器来自动增加主键值,我相信这就是问题源于此的地方。以下是错误消息:
System.InvalidOperationException:已成功提交对数据库的更改,但更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。内部异常消息:保存或接受更改失败,因为“SocrataNightlyDump.Models.INCIDENT_CRIME_READBACK”类型的多个实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和Entity Framework模型中正确配置了数据库生成的主键。使用实体设计器进行数据库优先/模型优先配置。使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行代码优先配置。
System.InvalidOperationException:保存或接受更改失败,因为“SocrataNightlyDump.Models.INCIDENT_CRIME_READBACK”类型的多个实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和Entity Framework模型中正确配置了数据库生成的主键。使用实体设计器进行数据库优先/模型优先配置。使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行代码优先配置。
at System.Data.Entity.Core.Objects.ObjectStateManager.FixupKey(EntityEntry entry)
在System.Data.Entity.Core.Objects.EntityEntry.AcceptChanges()
at System.Data.Entity.Core.Objects.ObjectContext.AcceptAllChanges()
在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction) ---内部异常堆栈跟踪结束--- 在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction) 在System.Data.Entity.Core.Objects.ObjectContext。<> c__DisplayClass2a.b__27() 在System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute [TResult](Func`1操作) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options,Boolean executeInExistingTransaction) 在System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions选项) 在System.Data.Entity.Internal.InternalContext.SaveChanges() 在System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 在System.Data.Entity.DbContext.SaveChanges() 在C:\ Users \ Austin \ Documents \ SocrataNightlyDump \ SocrataNightlyDump \ Program.cs:第71行的SocrataNightlyDump.Program.Main(String [] args)
我将[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
属性放在生成的模型类中的主键值上,但这并没有解决问题。这些条目仍保存在数据库中,但在运行程序时它仍然会抛出此异常。有没有人在使用Oracle数据库并具有自动增量触发器时遇到此问题?
编辑:这是我的模型类中的相关代码:
[Table("INCIDENT_CRIME_SOCRATA_USER.INCIDENT_CRIME_READBACK")]
public partial class INCIDENT_CRIME_READBACK
{
[Column("ID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public decimal primaryKeyId { get; set; }
...
}