本文首先解决了从同一表(例如,Team
)将两个外键映射到实体框架代码中的另一个表(Match
)的挑战。 遇到的一个常见错误是周期性参考例外。
问题:
>用Match
HomeTeam
和aGuestTeam
进行建模时,都引用了Team
>表时,经常会出现周期性关系误差。 这是因为默认情况下,实体框架假定一对多的关系,导致循环依赖性。
解决方案:
关键是将关系明确定义为两个单独的一对一对多关系,从Team
类中创建两个导航属性来实现的。Match
Team
请注意,
现在有<code class="language-csharp">public class Team { public int TeamId { get; set; } public string Name { get; set; } public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; } } public class Match { public int MatchId { get; set; } public int HomeTeamId { get; set; } public int GuestTeamId { get; set; } public float HomePoints { get; set; } public float GuestPoints { get; set; } public DateTime Date { get; set; } public virtual Team HomeTeam { get; set; } public virtual Team GuestTeam { get; set; } }</code>>和
> collections,清楚地区分了每个团队在比赛中的角色。Team
>
HomeMatches
AwayMatches
模型配置(dbContext):
需要在您的类的方法中明确定义关系:
>
OnModelCreating
此配置明确映射外国钥匙,重要的是,设置DbContext
以防止删除匹配时的团队意外删除。
以上是如何首先在实体框架代码中正确映射两个外键?的详细内容。更多信息请关注PHP中文网其他相关文章!