簡體   English   中英

實體框架4和SQL Server 2008多個可能的外鍵

[英]Entity Framework 4 and SQL Server 2008 Multiple Possible Foreign Keys

我正在嘗試提出一種可與Entity Framework 4 Code First一起使用的數據庫設計。 實際上,我還沒有EF4 Code First的經驗,但是據我了解,如果我編寫代碼,它將創建數據庫和表。

問題是這個。 拍賣有多種類型,它們都有一些共同的領域和一些特定的領域。 在代碼中,我設想有一個稱為Auction的基礎抽象類以及LowestUniqueBidAuctionEnglishForwardAuction等子類。

沒什么奇怪的。 問題是我想象數據庫結構可以模仿這一點。 我想象一個Auction表和一個LowestUniqueBidAuction表和一個EnglishForwardAuction表。 Auction表中,我想象根據該行的拍賣類型,在每行這兩個表之一中插入外鍵。 我還想象Auction表中的另一列具有派生拍賣表的名稱(例如EnglishForwardAuction )。

問題在於,無論何時創建外鍵,我都必須指定鍵指向的外表的名稱(這很有意義)。 但是,在這種情況下,鍵可能指向許多表之一。 所以這里有很多問題。 首先,我不能簡單地使用外鍵,而只能使用普通字段,但是數據庫將無法為我保持數據一致性。 第二個問題是EF Code First將如何處理? 換句話說,如果我從Auction表中詢問所有EnglishForwardAuction行,它應該如何查看具有表名的列,然后加入EnglishForwardAuction表以獲取額外的字段,該EnglishForwardAuction知道呢?

有沒有人遇到過類似的問題?

謝謝,

薩欽

在Entity Framework中,該問題可以通過多種方式解決-閱讀EF如何處理繼承以及可用的策略。

基本上有三種策略可以解決此問題:

(1)每個層次的表

您只有一個表,該表代表所有可能的子類。 當然,這意味着幾行(僅存在於給定的子類中)必須為空,因為它們不會顯示/在超類或其他子類中不存在。

(2)每種類型的表

每個子類都有自己的表,並且默認情況下,子類型表與基類的表共享PK-例如, Auction中的PK = 1EnglishForwardAuction也將為PK = 1 因此,您的子類表引用了基表,而不是相反。

(3)每種混凝土類型的表

每個具體的子類(您單獨的拍賣類型)都有自己的表,但該表包含所有內容-該特定類型的所有列,還包括其基本類型。

在這里閱讀更多:

搜索Entity Framework Inheritance和/或這些策略之一也將揭示更多的成功案例-該主題在互聯網上得到了很好的覆蓋和討論! :-)

暫無
暫無

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

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