У нас есть база данных, которая создает несколько ошибок каскадных путей. Я понимаю, что это значит и что происходит, но я хотел бы знать лучший подход, поскольку мы должны удалить некоторые из имеющихся у нас опций 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 в Student-Course удаляет все студенческие курсы, связанные каскадом, при удалении учащегося
- CourseId FK в Student-Course удаляет все студенческие курсы, связанные каскадом, при удалении курса
Итак, у нас есть цикл, потому что при удалении школы объект 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);
Вопрос здесь в том, что было бы лучшим подходом.
Спасибо.