1
我正在使用Code First方法在此问题中构建数据库。我有以下的(部分)实体:EF实体之间的多重关系
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
如果我这样做,我得到一个属性OfficialID和HeadOfficial_OfficialID在我的比赛表,我得到TournamentID,Tournament_TournamentID和Tournament_TournamentID1在我的官员表。我意识到现在我不仅在锦标赛和官方之间有一对多的关系(因为锦标赛可以有很多官员),但我也有一对一的关系(因为锦标赛只能有一个头官方)。
我该如何解决这个问题?
非常感激先生,但我不明白Fluent API的第二部分。实体锦标赛有很多官员(我明白这一点),但随后锦标赛带有可选锦标赛和HasForeignKey锦标赛ID?为什么锦标赛会有一个外键的锦标赛ID? – Mekswoll 2012-03-27 19:28:55
@pEkvo:最后一个'HasForeignKey'为'Official'实体的属性表达式,而不是'Tournament',所以'TournamentID'是'Official'中的FK。在lambda参数中基本上't' =“比赛”,“o”=“官方”。 – Slauma 2012-03-27 19:32:36
是的,现在明白了,非常感谢。 – Mekswoll 2012-03-27 19:36:53