繁体   English   中英

实体框架6关于SaveChanges()的主键问题

[英]Entity Framework 6 Primary Key Issue On SaveChanges()

我从公共api获取大量数据,并且首先使用EF代码将其转储到内部Oracle DB中。 我在数据库中使用触发器来自动增加主键值,我相信这就是问题的根源。 这是错误消息:

System.InvalidOperationException:对数据库的更改已成功提交,但是在更新对象上下文时发生了错误。 ObjectContext可能处于不一致状态。 内部异常消息:保存或接受更改失败,因为多个“ SocrataNightlyDump.Models.INCIDENT_CRIME_READBACK”类型的实体具有相同的主键值。 确保显式设置的主键值是唯一的。 确保在数据库和实体框架模型中正确配置了数据库生成的主键。 将实体设计器用于数据库优先/模型优先配置。 使用“ HasDatabaseGeneratedOption”流利的API或“ DatabaseGeneratedAttribute”进行代码优先配置。

System.InvalidOperationException:保存或接受更改失败,因为多个“ SocrataNightlyDump.Models.INCIDENT_CRIME_READBACK”类型的实体具有相同的主键值。 确保显式设置的主键值是唯一的。 确保在数据库和实体框架模型中正确配置了数据库生成的主键。 将实体设计器用于数据库优先/模型优先配置。 使用“ HasDatabaseGeneratedOption”流利的API或“ DatabaseGeneratedAttribute”进行代码优先配置。

在System.Data.Entity.Core.Objects.ObjectStateManager.FixupKey(EntityEntry条目)处
在System.Data.Entity.Core.Objects.EntityEntry.AcceptChanges()
在System.Data.Entity.Core.Objects.ObjectContext.AcceptAllChanges()
在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项,IDbExecutionStrategy执行策略,布尔值startLocalTransaction)-内部异常堆栈跟踪的结尾-在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore System.Data.Entity.Core.Objects.ObjectContext。<> c__DisplayClass2a.b__27()(在System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute [TResult](Func`1操作) )的System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options,Boolean executeInExistingTransaction)的System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options)的System.Data.Entity.Internal.InternalContext C. \\ Users \\ Austin \\中SocrataNightlyDump.Program.Main(String [] args)中System.Data.Entity.DbContext.SaveChanges()中System.Data.Entity.Internal.LazyInternalContext.SaveChanges()中的.SaveChanges()文件\\所以 crataNightlyDump \\ SocrataNightlyDump \\ Program.cs:第71行

我将[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; }
        ...
    }

您的模型配置正确,但是必须使用sequence EF6处理数据库生成的字段(特别是PK)的方式非常有限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM