[英]Table-per-type inheritance insert problem
我遵循了這篇文章 ,為我的實體創建了每個類型的表繼承模型,但是遇到了一些問題。 下面,我將發布一些步驟來重現我在最小環境中遇到的問題,以排除其他因素。
首先,我使用以下兩個表創建了一個新的MS SQL Server 2008 R2數據庫:
接下來,我從數據庫中生成了.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提出了以下解決方案,也許可以幫助您:
我認為我已經知道了。 Party子類型的表的鍵列設置為自動生成鍵值,並且由於該鍵值是派生的,因此EF希望顯式設置該值。
那么,您是否嘗試過從客戶表中刪除“身份”設置? 因此,它不會自動生成主鍵嗎?
希望這可以幫助。
我終於找到了麻煩的根源。 對於仍然感興趣的用戶,在“客戶”表中, 不應將“ ID”列設置為表的“標識”列(不過PK和FK依賴關系很好)。
為什么不想將外鍵(UserId)作為單獨的列? 也許可以幫到您。 也嘗試使用模型優先方法,並在模型創建后生成db,如以下文章中所述 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.