Entity Framework 代码优先循环或多个级联路径

Entity Framework Code first cycles or multiple cascade paths

我们有一个数据库正在产生一些多级联路径错误。 我确实理解这意味着什么以及正在发生什么,但我想知道最好的方法,因为我们必须删除我们拥有的一些 OnDelete Cascade 选项。

这是我们的table结构:

SCHOOL
- SchoolId  
- Name
- ....

STUDENT
- StudentId
- SchoolId
- Name
- ...

COURSE
- CourseId
- SchoolId
- Name

STUDENT-COURSE
- StudentId
- CourseId
- ....

所以这里有循环,因为当删除学校时,实体 Student-Course 将从 2 个不同的方面删除,从而创建循环。

我明白这里发生了什么:

HasMany(p => p.Students)
   .WithRequired(p => p.School)
   .HasForeignKey(p => p.SchoolId)
   .WillCascadeOnDelete(true);  

我知道我能做到:

HasMany(p => p.Students)
    .WithRequired(p => p.School)
    .HasForeignKey(p => p.SchoolId)
    .WillCascadeOnDelete(false); 

这里的问题是什么是最好的方法。

谢谢。

我会在删除级联时从学校中删除,其他的保持原样,在删除学校时添加一些逻辑来删除相关的学生、课程(但他保持较低级别删除的一致性)。 如果从Students中移除on delete cascade,需要手动添加删除逻辑,先清理相关学生课程,会和课程删除有些不一致(层级在删除逻辑上不一致)