2016-12-07 5 views
0

여러 개의 계단식 경로 오류를 만드는 데이터베이스가 있습니다. 그 의미와 현재 상황에 대해 이해하고 있지만, OnDelete Cascade 옵션 중 일부를 제거해야하므로 최선의 방법을 알고 싶습니다.Entity Framework 코드 첫 번째 사이클 또는 여러 개의 계단식 경로

이 우리의 테이블 구조입니다 :

SCHOOL 
- SchoolId 
- Name 
- .... 

STUDENT 
- StudentId 
- SchoolId 
- Name 
- ... 

COURSE 
- CourseId 
- SchoolId 
- Name 

STUDENT-COURSE 
- StudentId 
- CourseId 
- .... 
    학생의
  • SchoolId FK는
  • SchoolId FK이 과정에서 삭제할 때 캐스케이드에 관련된 모든 과정을 삭제하는 학교를 삭제할 때 캐스케이드에 관련된 모든 학생들을 삭제 학교
  • StudentId FK는 학생 삭제시 계단식으로 관련된 모든 학생 과정을 삭제합니다.
  • 학생 과정에서 FK를 삭제합니다. 수업을 삭제할 때 계단식으로 연결된 모든 학생과 과정

학교를 삭제할 때 엔티티 학생 과정이 두 가지 측면에서 삭제되어주기가 만들어지기 때문에주기가 있습니다.

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

소리가 좋습니다. 상위 수준에서 제거하고 해당 수준의 코드에서 일부 논리를 수행하십시오. 이렇게하면 하위 수준에 논리가 필요하지 않습니다. 감사 !!! –