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中的SchoolId FK删除学校时级联关联的所有学生
- SchoolId FK in Course删除学校时级联删除所有相关课程
- Student-Course中的StudentId FK在删除学生时删除级联相关的所有学生课程
- Student-Course中的CourseId FK在删除课程时删除所有级联相关的student-courses
所以这里有循环,因为当删除学校时,实体 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,需要手动添加删除逻辑,先清理相关学生课程,会和课程删除有些不一致(层级在删除逻辑上不一致)
我们有一个数据库正在产生一些多级联路径错误。 我确实理解这意味着什么以及正在发生什么,但我想知道最好的方法,因为我们必须删除我们拥有的一些 OnDelete Cascade 选项。
这是我们的table结构:
SCHOOL
- SchoolId
- Name
- ....
STUDENT
- StudentId
- SchoolId
- Name
- ...
COURSE
- CourseId
- SchoolId
- Name
STUDENT-COURSE
- StudentId
- CourseId
- ....
- Student中的SchoolId FK删除学校时级联关联的所有学生
- SchoolId FK in Course删除学校时级联删除所有相关课程
- Student-Course中的StudentId FK在删除学生时删除级联相关的所有学生课程
- Student-Course中的CourseId FK在删除课程时删除所有级联相关的student-courses
所以这里有循环,因为当删除学校时,实体 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,需要手动添加删除逻辑,先清理相关学生课程,会和课程删除有些不一致(层级在删除逻辑上不一致)