簡體   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