2016-12-07 148 views
0

我们有一个数据库正在创建一些多个级联路径错误。 我明白这意味着什么和发生了什么,但我想知道最好的方法,因为我们必须删除一些我们有的OnDelete Cascade选项。实体框架代码第一个周期或多个级联路径

这是我们的表结构:

SCHOOL 
- SchoolId 
- Name 
- .... 

STUDENT 
- StudentId 
- SchoolId 
- Name 
- ... 

COURSE 
- CourseId 
- SchoolId 
- Name 

STUDENT-COURSE 
- StudentId 
- CourseId 
- .... 
  • SchoolId FK在学生中删除所有删除学校
  • SchoolId FK在课程删除所有删除时级联相关的课程时,在级联相关学生一所学校
  • StudentId FK in Student-Course删除所有与级联相关的学生课程删除学生时
  • CourseId FK in Student-course delete一切都删除时,当然

所以在这里我们有周期,因为删除一所学校的实体时,学生,课程将被从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); 

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

谢谢。

+0

可能有更多的学生比课程,所以级联删除学生+学生课程更有效率。 –

回答

1

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

+0

听起来不错,所以从上层移除,并在这些层次的代码中执行一些逻辑。这种方式较低的层次不需要逻辑。谢谢 !!! –

相关问题