2016-12-07 79 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

聽起來不錯,所以從上層移除,並在這些層次的代碼中執行一些邏輯。這種方式較低的層次不需要邏輯。謝謝 !!! –

相關問題