代码优先:FOREIGN KEY约束可能导致循环或多个级联路径

时间:2016-09-05 14:42:29

标签: entity-framework ef-code-first

我正在开发一个与教育行业相关的应用程序,我有以下几类课程。

public class Person : EntityBase<long>
{
    public string Surname { get; set; }
    public string First { get; set; }
    public string Middle { get; set; }
    public Gender Gender { get; set; }
    public DateTime Dob { get; set; }
}

public class Student: Person
{
    public string AdmissionId { get; set; }
    public string StudentId { get; set; }
    public List<GuardianLink> Guardians { get; set; }
    public StudentStatus Status { get; set; }       
}

public class Guardian: Person
{
    public GuardianType GuardianType { get; set; }
    public List<GuardianLink> Students { get; set; }     
}

public class GuardianLink: EntityBase<long>
{
    [Required]
    public Student Student { get; set; }
    [Required]
    public Guardian Guardian { get; set; }

    public Boolean IsEmergencyContact { get; set; }
    public Boolean IsAllowedToPickup { get; set; }
}

当我尝试从这些类创建数据库时,我收到一个错误,这将导致循环级联删除。所以我添加了以下内容。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<GuardianLink>()
            .HasRequired(c => c.Guardian)
            .WithMany()
            .WillCascadeOnDelete(false);

    modelBuilder.Entity<GuardianLink>()
            .HasRequired(c => c.Student)
            .WithMany()
            .WillCascadeOnDelete(false);
}

我希望这可以解决这个问题,但我仍然会收到错误。

  

引入FOREIGN KEY约束   表'GuardianLinks'上的'FK_dbo.GuardianLinks_dbo.People_Student_Id'   可能会导致循环或多个级联路径。指定ON DELETE NO   ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY   约束

我想配置这个,以便在删除监护人时删除学生删除相关链接,但不删除监护人,反之亦然。为什么不解决这个问题呢?我应该做什么呢?

0 个答案:

没有答案