2016-04-26 195 views
0

我從一個公共api中提取大量數據,並且首先使用EF代碼將其轉儲到內部Oracle數據庫中。我在數據庫中使用了一個觸發器來自動遞增主鍵值,我相信這是問題產生的原因。以下是錯誤消息:實體框架6 SaveChanges上的主鍵問題()

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 executionStrategy,布爾startLocalTransaction) ---內部異常堆棧跟蹤的結尾--- 在系統.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction) at System.Data。 Entity.Core.Objects.ObjectContext。 <> c__DisplayClass2a.b__27() at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute [TResult](Func`1 operation) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options,Boolean executeInExistingTransaction ) at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Entity.Internal.InternalContext.SaveChanges() at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 在用C System.Data.Entity.DbContext.SaveChanges() 在SocrataNightlyDump.Program.Main(字串[] args):\用戶\奧斯汀\文件\ SocrataNightlyDump \ 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; } 
     ... 
    } 
+0

向我們展示代碼! – dotctor

回答

0

你的模型具有正確的配置,但you´ll have to use a sequence。EF6在處理數據庫生成的字段方面相當有限,特別是PK。

+0

我在我的數據庫中插入了一個序列和觸發器,問題是,儘管在模型類中我的PK變量具有'[DatabaseGenerated(DatabaseGeneratedOption.Identity)]'屬性,它仍然會拋出上述錯誤。 – Otto45