簡體   English   中英

每個類型的表繼承插入問題

[英]Table-per-type inheritance insert problem

我遵循了這篇文章 ,為我的實體創建了每個類型的表繼承模型,但是遇到了一些問題。 下面,我將發布一些步驟來重現我在最小環境中遇到的問題,以排除其他因素。

首先,我使用以下兩個表創建了一個新的MS SQL Server 2008 R2數據庫:

用戶

  • ID:bigint(PK並將其設置為標識列)
  • 名稱:nvarchar(25)NOT NULL(無論如何,一些隨機屬性

顧客

  • ID:bigint(PK,身份列和Users.Id上的FK)
  • 標題:nvarchar(25)NOT NULL(也是,還有一些隨機屬性)

接下來,我從數據庫中生成了.edmx實體模型,並按原樣瀏覽了鏈接。 也就是說,我刪除了User和Customer之間的關聯,將User設置為Customer的基類,從Customer實體中刪除了Id屬性,並確保將Customer.Id列映射到繼承的User.Id屬性。 。 然后,我運行以下小程序:

using (var db = new EF_Test.testEntities())
{
    var cust = db.Users.CreateObject<Customer>();
    db.Users.AddObject(cust);
    db.SaveChanges();
}

當我撥打最后一個電話時收到以下錯誤:

“在多個位置生成了跨實體或關聯共享的值。請檢查映射是否不會將EntityKey拆分為多個存儲生成的列。”

有以下內部異常:

“已經添加了具有相同鍵的項目。”

關於我可能會丟失的任何想法?

快速搜索錯誤消息的Google提出了以下解決方案,也許可以幫助您:

http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/4bfee3fd-4124-4c1d-811d-1a5419f495d4

我認為我已經知道了。 Party子類型的表的鍵列設置為自動生成鍵值,並且由於該鍵值是派生的,因此EF希望顯式設置該值。

那么,您是否嘗試過從客戶表中刪除“身份”設置? 因此,它不會自動生成主鍵嗎?

希望這可以幫助。

我終於找到了麻煩的根源。 對於仍然感興趣的用戶,在“客戶”表中, 不應將“ ID”列設置為表的“標識”列(不過PK和FK依賴關系很好)。

為什么不想將外鍵(UserId)作為單獨的列? 也許可以幫到您。 也嘗試使用模型優先方法,並在模型創建后生成db,如以下文章中所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM