2017-10-05 23 views
1

私はダブルエリミネーショントーナメントブラケットを格納するデータベースを構築しています。トーナメントの各試合には、お互いにプレイする2つのチームがあります。トーナメントの第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; } 
} 

2つのチームのそれぞれについて、チームの決定方法を示すTeamSourceTypeがあります。 TeamSourceType1/2が前の試合の勝者または敗者を指定する場合、勝者/敗者を得るためのMatchを参照するためにSourceMatch1/2が必要です。私はEntity Framework 6 Code Firstを使用しています。私は注釈と流暢なマッピングのいくつかの組み合わせを試したが、何も働いていない。 "Multiplicity is not valid ..."と "Multiplicity constraint violated ..."が表示されます。

この作業を行うために必要な注釈や流暢なマッピングはありますか?

+1

modelbuilderにこの仕様を追加あなたのproblem.httpsの素敵な説明です://stackoverflow.com/a/26425364/5713884 –

答えて

0

自分のプロジェクトの1つで自己参照テーブルを使用しなければならず、以下の方法で私の仕事をしなければなりませんでした。 私のエンティティクラスでは、このように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); 
}