2016-10-18 82 views
1

我有一個類有「團隊」類型「Team」和「TeamTwo」類型爲「Team」的兩個可選字段「TeamOne」。 球隊顯然可以存在而不被分配到一個遊戲中,並且在遊戲被刪除時不會被刪除,反之亦然。實體框架與fluentapi具有相同類型的多個可選關係

現在我想設置的關係是這樣的:

HasOptional(x => x.TeamOne).WithOptionalDependent(x => x.Game).WillCascadeOnDelete(false); 
HasOptional(x => x.TeamTwo).WithOptionalDependent(x => x.Game).WillCascadeOnDelete(false); 

我遇到指定的錯誤

模式是無效的。錯誤:因爲「Infrastructure.DAL.Team」類型不可用,所以未加載關係「Infrastructure.DAL.Match_TeamOne」。

我在這裏做錯了什麼?

編輯: 1個遊戲:1 TeamOne和1個teamtwo的 TeamOne和teamtwo的被分配到1場比賽最大

+0

我認爲你需要提供更多的信息,目前還不多。也許給實際的錯誤信息提供更多的上下文。從錯誤說它沒有指定架構。不知道您是否正在使用遷移,但可能您沒有使用新模式更新數據庫? – Tony

+0

我在做自動遷移。模式似乎是最新的。 –

+0

錯誤消息說該類型不可用。這可能會導致非公共屬性(或者沒有適當的getter/setter)或編譯錯誤的程序集。 – DevilSuichiro

回答

2

你想創建一個反向端兩個關係。 Game.TeamOneGame.TeamTwo都與Team.Game有關。但是,從Team來的時候,Game應該是Team.Game?是TeamOne還是TeamTwo?那裏有一個模棱兩可的問題。您需要第Game類型的第二個房產才能與TeamTwo聯繫。這將工作:

HasOptional(x => x.TeamOne).WithOptionalDependent(x => x.HomeGame).WillCascadeOnDelete(false); 
HasOptional(x => x.TeamTwo).WithOptionalDependent(x => x.AwayGame).WillCascadeOnDelete(false); 

但我不認爲這種模式可以是正確的。一個球隊真的只有一個Game?這是一個有趣的競爭模式!我認爲球隊可以在「多」的遊戲玩,和映射應該是這樣的:

HasOptional(x => x.TeamOne).WithMany(x => x.HomeGames) 
        .WillCascadeOnDelete(false) 
HasOptional(x => x.TeamTwo).WithMany(x => x.AwayGames) 
        .WillCascadeOnDelete(false) 

...其中HomeGamesAwayGamespublic (virtual) ICollection<Game>

+0

是的,我剛剛注意到問題的真實性......是的,一個團隊一次只能在一個遊戲中。當你想到「遊戲」時,把它想象成一場比賽。像德國隊和英格蘭隊一樣。德國不會一次打兩場比賽。在我的情況下,雖然沒有主隊和客隊。他們在技術上都是客場球隊。我不希望爲字面上相同類型的實體管理兩個表。必須有一種方式? –

+0

一次一場比賽,是的。但是你不希望每個團隊只存儲一個遊戲嗎?無論如何,如果你這樣做,你可以使用第一個映射並修改屬性名稱。或者使用你自己的映射,並用一個空參數'WithOptionalDependent()'替換一個'WithOptionalDependent'調用。請注意,在這個模型中,一個團隊*可以一次進入兩個遊戲,第一個是「TeamOne」,第二個是「TeamTwo」。 –

相關問題