实体框架代码第一个循环或多个级联路径

时间:2016-12-07 08:09:21

标签: entity-framework ef-code-first database-relations

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

这是我们的表结构:

SCHOOL
- SchoolId  
- Name
- ....

STUDENT
- StudentId
- SchoolId
- Name
- ...

COURSE
- CourseId
- SchoolId
- Name

STUDENT-COURSE
- StudentId
- CourseId
- ....
  • SchoolId FK in Student在删除学校时删除所有与级联相关的学生
  • SchoolId FK in course删除所有在删除学校时级联相关的课程
  • 学生课程中的StudentId FK会在删除学生时删除所有与级联相关的学生课程
  • CourseId FK in 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); 

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

感谢。

1 个答案:

答案 0 :(得分:1)

我会删除学校的删除级联,并保留其他原样,并在删除学校时添加一些逻辑来删除相关学生,课程(但他保持较低级别删除的一致性)。 如果您从学生中删除删除级联,您将需要手动添加删除逻辑,以便他们首先清理相关的学生课程,并且将以某种方式与删除课程不一致(层次结构级别在删除逻辑方面不一致)。