2012-07-10 93 views
1

我有一個導航屬性未加載的問題。我對所有其他實體都有同樣的設置,但是這是使用一個不是自然FK(數字)並且不會級聯的屬性,它將由觸發器處理。實體框架代碼首先不拉動導航屬性

Expression<Func<DivisionBracketGameParticipant, object>>[] includes2 = { 
                         q => q.DivisionWinnerBracketGame, 
                         q => q.DivisionLoserBracketGame 
                        }; 
      var test = _divisionBracketGameParticipantsRepository.GetMany(includes2, 
                     q => 
                     q.DivisionBracketGame.DivisionBracket.Division. 
                      EventId == eventId); 

數據庫模式

DivisionBracketGame 

Id 
Number 

DivisionBracketGameParticipant 

Id 
DivisionBracketGameId -> Id 
DivisionBracketGameWinnerNumber -> Number 
DivisionBracketGameLoserNumber -> Number 

實體

[Table("DivisionBracketGame", Schema = "GrassrootsHoops")] 
    public class DivisionBracketGame : BaseEntity 
    { 
     public int Id{ get; set; } 
     public int Number { get; set; } 

     [InverseProperty("DivisionBracketGame")] 
     public virtual ICollection<DivisionBracketGameParticipant> DivisionBracketGameParticipants { get; set; } 

     [InverseProperty("DivisionWinnerBracketGame")] 
     public virtual ICollection<DivisionBracketGameParticipant> DivisionWinnerBracketGameParticipants { get; set; } 

     [InverseProperty("DivisionLoserBracketGame")] 
     public virtual ICollection<DivisionBracketGameParticipant> DivisionLoserBracketGameParticipants { get; set; } 
    } 

[Table("DivisionBracketGameParticipant", Schema = "GrassrootsHoops")] 
public class DivisionBracketGameParticipant : BaseEntity 
    { 
     public int Id{ get; set; } 
     public virtual int DivisionBracketGameId { get; set; } 
     public virtual int? DivisionWinnerBracketGameNumber { get; set; } 
     public virtual int? DivisionLoserBracketGameNumber { get; set; } 

     [ForeignKey("DivisionBracketGameId")] 
     public virtual DivisionBracketGame DivisionBracketGame { get; set; } 

     [ForeignKey("DivisionWinnerBracketGameNumber")] 
     public virtual DivisionBracketGame DivisionWinnerBracketGame { get; set; } 

     [ForeignKey("DivisionLoserBracketGameNumber")] 
     public virtual DivisionBracketGame DivisionLoserBracketGame { get; set; } 
    } 

回答

0

,因爲它不是一個主鍵EF不會產生關係Number。主鍵是你的DivisionBracketGameId,所以DivisionWinnerBracketGameDivisionLoserBracketGame的目標都是Id(而不是Number)。

一對多關係要求主表中的列是唯一的 - 在您的情況下,列應該是Number。這可以通過使用主表中的主鍵或通過在該列上使用唯一索引在數據庫中實現。 EF不支持唯一索引/候選鍵,因此在EF中構建一對多關係的唯一方法是通過主體表的主鍵。

FK值用於獲取相關值,因此目前它可能會查找具有錯誤值的記錄,因爲它使用了錯誤的列。

+0

即使我明確告訴它外鍵是什麼? – 2012-07-10 15:37:30

+0

你可以告訴EF哪些屬性是導航屬性的外鍵,但是你不能告訴EF該關係沒有根據主表中的主鍵定義。 – 2012-07-10 15:42:17

+0

拉迪斯拉夫,我可以從你的語句推斷導航屬性將生成**只** **外鍵指向主鍵,而不是唯一鍵?我問這[這裏](http://stackoverflow.com/questions/32327153/are-navigation-properties-generated-only-for-fks-on-pks-as-opposed-to-unique-ke)。 – Veverke 2015-09-01 08:48:41