我试图建立双重关系。让我们说它的团队和球员 - 一支球队有很多球员,但只有一名队长
public class Team
{
public int Id { get; set; }
public virtual ICollection<Player> Players { get; set; }
public Player Captain { get; set; }
public int CaptainId { get; set; }
}
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
[InverseProperty("Players")]
public virtual Team Team { get; set; }
public int TeamId { get; set; }
}
运行update-database时,会导致错误 ALTER TABLE语句与FOREIGN KEY约束冲突&#34; FK_dbo.Teams_dbo.Players_TeamId&#34;。冲突发生在数据库&#34; dev&#34;,table&#34; dbo.Players&#34;,column&#39; Id&#39;中。 (我正在翻译我的真正的类名/字段)
答案 0 :(得分:1)
使用Fluent API明确描述您的实体关系。
modelBuilder.Entity<Team>().HasMany(t => t.Players).WithRequired(p => p.Team).HasForeignKey(p => p.TeamId);
modelBuilder.Entity<Team>().HasRequired(t => t.Captain).WithMany().HasForeignKey(t => t.CaptainId);
您可以在上面看到Team-&gt; Captain关系被视为多对一关系。据推测,一个特定的球员不能成为一支以上球队的队长,但由于球队与球员之间的关系是一对多的,所以一个特定的球员无论如何都不在一支以上的球队,应该很容易确保通过你的UI,一个团队的队长也是该团队的一名球员,因此一个特定的球员只能成为一支球队的队长。