2011-06-17 25 views
0

我有一個超級英雄。超級英雄可以有許多武器。超級英雄可以有很多車輛。超級英雄可以將他們的武器附在車輛上,但他們不應該這樣做。我可以使實體關聯是可選的還是可以爲空的?

http://fm001-forumimages.s3.amazonaws.com/EntityHero.png

在實體框架,如果我創建了一個武器並將其分配給一個超級英雄,這也迫使我將其附加到的車輛(以下錯誤)。

  1. 這是預期的行爲?
  2. 超級英雄,武器和車輛之間的正確的實體關聯映射是什麼?
  3. 什麼是一個很好的示例谷歌搜索詞組,以更好地理解這一點?

謝謝!

回答

1

你需要一個多對多的關於武器的超級英雄和武器的車輛。它很可能表示爲一對鏈接表,如下所示:

CREATE TABLE SuperheroWeapons (
    SuperheroId bigint NOT NULL, 
    WeaponId bigint NOT NULL, 
    CONSTRAINT SuperheroWeapons_PK PRIMARY KEY CLUSTERED (SuperheroId ASC, WeaponId ASC), 
    CONSTRAINT SuperheroWeapons_FK_SuperheroId FOREIGN KEY (SuperheroId) REFERENCES Superheros (SuperheroId), 
    CONSTRAINT SuperheroWeapons_FK_WeaponId FOREIGN KEY (WeaponId) REFERENCES Weapons (WeaponId) 
) 

以及VehicleWeapons表的類似表達式。

1

武器和車輛之間的實體框架關係關閉以及超級英雄和武器。

你會想讓它成爲多對多的關係,即。有許多武器的車輛很多,也有許多屬於許多車輛的武器。

你可以用一箇中間實體來實現這一點,該實體映射到武器和車輛以及超級英雄和武器。 看看Many to Many Relationships with EF

+0

我認爲你的幫助讓我回答,這不是你的答案,但它讓我在那裏。外鍵是Nullable = False,這是一件好事,它阻止了我在不創建有效關聯的情況下保存到數據庫。所以,我不得不提出一個替代方案 - 我知道設置Foreign Key Nullable = True可能不是好的做法。我並不總是希望車輛擁有武器,所以我不知道如何執行這種關聯。 –

+0

外鍵可以爲空是完全正確的,這實際上就是這樣做的方法。這樣做需要從「一對多」關係到「零對多」關係。 –

相關問題