【发布时间】:2016-12-07 08:09:21
【问题描述】:
我们有一个数据库正在创建一些多级联路径错误。 我确实理解这意味着什么以及正在发生什么,但我想知道最好的方法,因为我们必须删除我们拥有的一些 OnDelete Cascade 选项。
这是我们的表结构:
SCHOOL
- SchoolId
- Name
- ....
STUDENT
- StudentId
- SchoolId
- Name
- ...
COURSE
- CourseId
- SchoolId
- Name
STUDENT-COURSE
- StudentId
- CourseId
- ....
- Student 中的SchoolId FK 在删除学校时会删除所有级联相关的学生
- 删除学校时,Course 中的SchoolId FK 会删除所有级联相关的课程
- StudentId FK in Student-Course 在删除学生时会删除所有级联相关的学生课程
- Student-Course 中的 CourseId FK 在删除课程时会删除所有级联相关的学生课程
所以这里我们有了循环,因为在删除学校时,实体 Student-Course 将从两个不同的方面删除,从而创建循环。
我明白这里发生了什么:
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);
这里的问题是什么是最好的方法。
谢谢。
【问题讨论】:
-
学生可能比课程多,因此级联删除学生+学生课程更有效。
标签: entity-framework ef-code-first database-relations