2017-10-05 103 views
1

我建立一個數據庫來存儲一個雙敗淘汰制支架。錦標賽中的每場比賽都有兩支球隊互相比賽。在第一輪比賽中,球隊根據種子進行固定。在接下來的幾輪中,球隊是以前比賽的贏家和輸家。實體框架自我參照實體

public class Match 
{ 
    public int MatchId { get; set; } 
    [Required] 
    public virtual Round Round { get; set; } 
    // other stuff to keep track of match results 
    public virtual Team Team1 { get; set; } 
    public virtual Team Team2 { get; set; }  
    [Required] 
    public TeamSourceType SourceType1 { get; set; } 
    [Required] 
    public TeamSourceType SourceType2 { get; set; } 
    public virtual Match SourceMatch1 { get; set; } 
    public virtual Match SourceMatch2 { get; set; } 
} 

對於兩個隊伍中的每一個隊伍都有一個TeamSourceType來表明隊伍是如何確定的。如果TeamSourceType1/2指定的贏家還是以前的比賽的失敗者,我需要SourceMatch1/2到參考從中獲取贏家/輸家的比賽。我使用的是實體框架6 Code First。我嘗試了幾種註釋和流暢映射的組合,但沒有任何工作。 我得到「多重性無效......」和「違反多重性約束......」。

什麼註釋和/或流利的映射做我需要做這項工作?

+1

這是你problem.https的一個很好的補充解釋說明書中對modelbuilder://stackoverflow.com/a/26425364/5713884 –

回答

0

我曾在我的項目之一,以使用自引用表,並通過以下方式爲我工作。 在我的實體類,我定義FK這樣。

public int? RelatedMatchId{ get; set; } 
public virtual Match SourceMatch1 { get; set; } 

然後,我在OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Match>() 
     .HasOptional(c => c.SourceMatch1) 
     .WithMany() 
     .HasForeignKey(c => c.RelatedMatchId); 
}