我一直在經歷着的ObjectContext不一致的狀態異常:實體框架TPC:爲什麼BaseEntity ID需要是Guid類型?
到數據庫的更改已成功提交,但在更新對象上下文時發生錯誤 。 ObjectContext可能是 處於不一致狀態。內部異常消息:AcceptChanges 無法繼續,因爲對象的鍵值與ObjectStateManager中的另一個 對象衝突。在調用AcceptChanges之前,確保鍵值爲 唯一。
這似乎發生時,我的基實體(因爲使用TPC抽象)具有
public int Id { get; set;}
,其被配置爲通過所述數據庫生成的主密鑰:
// Base Entity
modelBuilder.Entity<BaseEntityObject>().HasKey(t => t.Id);
modelBuilder.Entity<BaseEntityObject>().Property(t => t.Id).
HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
和衍生實體也繼承這一點並試圖將其用作主鍵。
當您實例化兩種不同類型的派生條目時,將它們添加到DbContext中,然後嘗試SaveChanges(),異常被觸發。但是,當Id字段從int更改爲Guid時:
public Guid Id { get; set;}
此異常不再被拋出。
有人可以解釋爲什麼發生這種情況時,Id屬性的類型爲int?
有沒有解決方法呢?讓每個派生實體都擁有Guid PK似乎有點浪費。
您可以發佈你的基地和子類的一個例子嗎?另外,您的ID列是否在編輯器中標記爲IsIdentity? – Robert
我絕對可以發佈一個基礎和一個孩子類的例子。你的意思是「你的ID列,在編輯器中標記爲IsIdentity」? – blgrnboy
您的'ID'列是否標記爲'PrimaryKey'並且設置爲數據庫中的'Identity'列,如果是,它是否在EDMX模型編輯器中將EntityKey屬性設置爲'true'? – Robert