外键可能会导致循环或多个级联路径实体框架核心

时间:2019-01-11 07:41:28

标签: asp.net-core entity-framework-core

我正在使用Entity Framework核心,并向我的项目添加了一个名为CourseOffering的模型。该模型与Section等其他类相关。我已成功为其创建了迁移。问题是当我尝试将迁移应用于数据库时。我收到以下错误:

  

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

我试图用FluentAPI关闭级联删除,但是我不完全确定这是否是解决我的问题的正确方法。我的意思是关闭层叠删除是否完全安全?

我的课程提供模型:

public class CourseOffering
{
    public int Id { get; set; }
    public Section Section { get; set; }
    public Instructor Instructor { get; set; }
    public Course Course { get; set; }
    public AcademicSemester AcademicSemester { get; set; }
    public int SectionId { get; set; }
    public int InstructorId { get; set; }
    public int? CourseId { get; set; }
    public int AcademicSemesterId { get; set; }
}

我的部分模型:

public class Section
{
    public int Id { get; set; }

    [Required]
    [StringLength(10)]
    public string Name { get; set; }

    public int EntranceYear { get; set; }

    public int StudentCount { get; set; }

    public Department Department { get; set; }

    public ProgramType Program { get; set; }

    public AdmissionLevel AdmissionLevel { get; set; }

    public ICollection<RoomSectionAssignment> RoomAssignments { get; set; }

    public int DepartmentId { get; set; }

    public int ProgramTypeId { get; set; }

    public int AdmissionLevelId { get; set; }

    public Section()
    {
        RoomAssignments = new Collection<RoomSectionAssignment>();
    }
}

该迁移创建了所有必需的外键,但是存在会导致循环的级联路径。我无法弄清楚是什么原因导致了周期。我应该只使用FluentAPI关闭层叠删除吗?

1 个答案:

答案 0 :(得分:1)

  

我试图用FluentAPI关闭级联删除,但是我不确定这是否是解决我问题的正确方法。我的意思是关闭层叠删除是否完全安全?

是的!在这种情况下,这是合适的解决方案!而且是的!使用FluentAPI关闭层叠删除是完全安全的,因为FluentAPI也会对数据库产生约束。