首页 文章

EF6 Code First - 可能导致循环或多个级联路径

提问于
浏览
7

我正在使用EF6 Code First . 我有两节课:

public class Player
{
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id { get; set; }

    [Required, MinLength(2, ErrorMessage = "Player name must be at least 2 characters length")]
    public string Name { get; set; }

    [Required]
    public int TeamClubId { get; set; }

    [Required]
    public int TeamNationalId { get; set; }

    [Required, ForeignKey("TeamClubId")]
    public virtual Team Club { get; set; }

    [Required, ForeignKey("TeamNationalId")]
    public virtual Team National { get; set; }

}

和:

public class Team
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required, MinLength(2, ErrorMessage = "Team name must be at least 2 characters length")]
    public string Name { get; set; }

    [Required]
    public TeamType Type { get; set; }

    public virtual ICollection<Player> Players { get; set; }
}

这是我与他们关系的两个 class . 一名球员属于两支球队:俱乐部和国家队 . 球队可以是俱乐部或国家队,并拥有一系列球员 .

在我的上下文文件中我使用:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Player>()
                .HasRequired<Team>(p => p.National)
                .WithMany(t => t.Players)
                .WillCascadeOnDelete(false);

        base.OnModelCreating(modelBuilder);
    }

运行迁移工具以更新数据库时,出现以下错误:

在'Players'表上引入FOREIGN KEY约束'FK_dbo.Players_dbo.Teams_TeamNationalId'可能会导致循环或多个级联路径 . 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束 . 无法创建约束 . 查看以前的错误 .

我该如何解决?

2 回答

  • 0

    使用Fluent API:

    //player - national team relations
            modelBuilder.Entity<Player>()
                .HasRequired<Team>(p => p.National)
                .WithMany()
                .WillCascadeOnDelete(false);
    
            //player - club team relations
            modelBuilder.Entity<Player>()
                .HasRequired<Team>(p => p.Club)
                .WithMany()
                .WillCascadeOnDelete(false);
    
  • 9

    我认为你的 Team 只有一个指向它的两个不同外键的导航属性这一事实可能是你的EF代码有问题 . 在 Team 上有两个导航属性可能更容易接受 - 一个用于指向它的每个外键 .

相关问题