我正在使用 Code First 方法来构建这个问题中的数据库。我有以下(部分)实体:
public class Tournament {
public int TournamentID { get; set; }
public String Name { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public int? SportID { get; set; }
public virtual Sport Sport { get; set; }
public virtual ICollection<Official> Officials { get; set; }
}
在官方实体中,我有这个:
public class Official {
public int OfficialID { get; set; }
public String Surname { get; set; }
public String FirstName { get; set; }
public int? TournamentID { get; set; }
public virtual Tournament Tournament { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
使用一些示例数据并检查 SQL Server 数据库,这正如我所期望的那样工作。比赛与官员是一对多的关系。
我遇到的问题是,我希望比赛能够将官员的主键作为主要官员。所以我会添加到锦标赛实体:
public int? OfficialID { get; set; } // foreign key to official table
public virtual Official HeadOfficial { get; set; } // navigation property
如果我这样做,我会在我的 Tournament 表中获得属性 OfficialID 和 HeadOfficial_OfficialID,并在我的 Officials 表中获得 TournamentID、Tournament_TournamentID 和 Tournament_TournamentID1。我意识到我现在不仅在锦标赛和官方之间有一对多的关系(认为锦标赛可以有很多官员),而且我也有一对一的关系(认为锦标赛只能有一个头)官方的)。
我该如何解决这个问题?