[英]Entity Framework 4 and SQL Server 2008 Multiple Possible Foreign Keys
我正在嘗試提出一種可與Entity Framework 4 Code First一起使用的數據庫設計。 實際上,我還沒有EF4 Code First的經驗,但是據我了解,如果我編寫代碼,它將創建數據庫和表。
問題是這個。 拍賣有多種類型,它們都有一些共同的領域和一些特定的領域。 在代碼中,我設想有一個稱為Auction
的基礎抽象類以及LowestUniqueBidAuction
和EnglishForwardAuction
等子類。
沒什么奇怪的。 問題是我想象數據庫結構可以模仿這一點。 我想象一個Auction
表和一個LowestUniqueBidAuction
表和一個EnglishForwardAuction
表。 在Auction
表中,我想象根據該行的拍賣類型,在每行這兩個表之一中插入外鍵。 我還想象Auction
表中的另一列具有派生拍賣表的名稱(例如EnglishForwardAuction
)。
問題在於,無論何時創建外鍵,我都必須指定鍵指向的外表的名稱(這很有意義)。 但是,在這種情況下,鍵可能指向許多表之一。 所以這里有很多問題。 首先,我不能簡單地使用外鍵,而只能使用普通字段,但是數據庫將無法為我保持數據一致性。 第二個問題是EF Code First將如何處理? 換句話說,如果我從Auction
表中詢問所有EnglishForwardAuction
行,它應該如何查看具有表名的列,然后加入EnglishForwardAuction
表以獲取額外的字段,該EnglishForwardAuction
知道呢?
有沒有人遇到過類似的問題?
謝謝,
薩欽
在Entity Framework中,該問題可以通過多種方式解決-閱讀EF如何處理繼承以及可用的策略。
基本上有三種策略可以解決此問題:
(1)每個層次的表
您只有一個表,該表代表所有可能的子類。 當然,這意味着幾行(僅存在於給定的子類中)必須為空,因為它們不會顯示/在超類或其他子類中不存在。
(2)每種類型的表
每個子類都有自己的表,並且默認情況下,子類型表與基類的表共享PK-例如, Auction
中的PK = 1
在EnglishForwardAuction
也將為PK = 1
。 因此,您的子類表引用了基表,而不是相反。
(3)每種混凝土類型的表
每個具體的子類(您單獨的拍賣類型)都有自己的表,但該表包含所有內容-該特定類型的所有列,還包括其基本類型。
在這里閱讀更多:
搜索Entity Framework Inheritance
和/或這些策略之一也將揭示更多的成功案例-該主題在互聯網上得到了很好的覆蓋和討論! :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.