2012-09-13 5 views
3

처음에는 코드에서 다음 코드를 작성하려고합니다 ... 저는 시작할 수 없으므로 .. 도와 드릴 수 없습니다 .. 미리 감사드립니다.
1. 학생 : 학생 의 컬렉션이 있어야 클래스 ClassId를있을 것이다, 이름
클래스 학생이 하나 개의 클래스와
2 클래스 (각 엔티티 한 관계를 기본적으로 하나의) 하나 개의 섹션에 속해야
학생 ID, 이름, 성이있을 것이다 학생 및 섹션 모음 (기본적으로 각 개체와의 많은 관계)
3. 섹션 : 섹션에는 섹션 ID, 이름이 부여됩니다.
Sectio 여기서 n은
아래는 같은엔티티 프레임 워크 asp.net MVC 외래 키

Students.cs 코드입니다 하나 개의 클래스에 속해야 학생 (학생 많은 관계로 기본적으로 1-1 클래스와의 관계 및 하나)의 수집을해야

public class Students 
{ 
    public int StudentsId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
    public decimal Grade { get; set; } 
    public int ClassesId { get; set; } 
    public Classes Classes { get; set; } 
    public int SectionsId { get; set; } 
    public Sections Sections { get; set; } 
} 

Classes.cs

public class Classes 
{ 
    public int ClassesId { get; set; } 
    public string Name { get; set; } 

    public ICollection<Sections> Sections { get; set; } 
} 

Sections.cs

public class Sections 
{ 
    public int SectionsId { get; set; } 
    public string Name { get; set; } 
    public int ClassesId { get; set; } 

    public Classes Classes { get; set; } 
    public ICollection<Students> Students { get; set; } 
} 
내가 이렇게 할 경우

내가 말하는 오류가 발생합니다 :

은 FOREIGN KEY 제약 소개 'FK_dbo.Sections_dbo.Classes_ClassesId'테이블 '섹션'에 사이클 또는 여러 개의 캐스케이드 경로의 원인이 될 수 있습니다. NO DELETE NO ACTION 또는 ON UPDATE NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오.

나는 유창한 API를 사용하여이 오류를 없애고 삭제를 계단식으로하지 말라고 알았지 만, 그렇게하고 싶지 않습니다. 거기에 다른 해결책이 있습니까 ?? 도와주세요

답변

1

현재 모델을 사용하면 일부 관계에 대해 casdading delete를 비활성화하는 것 외에 다른 방법이 없습니다.

귀하의 모든 관계 (때문에 필요한 탐색 속성 Students에서 ClassesClasses 학생들의 노출되지 않은 컬렉션이 있습니다) 클래스가 삭제 된 경우 부분 및 그 클래스의 학생들을 삭제하는 것이 의미, 필요합니다. 그러나 섹션이 삭제되면 해당 섹션의 학생도 삭제되며 두 번째 삭제 경로는 Students입니다.

모델의 정확한 의미는 모르겠지만 클래스가 삭제되면 클래스의 모든 학생을 삭제하는 것이 이상하게 들립니다. 학생은 항상 이 있어야합니까, 아니면 일시적으로 수업 과제 및 과제 할당이 없을 수 있습니까? 어쩌면 학생은 반년 동안 휴가 학기를 갖고 어떤 수업에도 참여하지 않을 수 있습니까?

그런 경우 Students의 관계를 선택적으로 만들 수 있습니다. 다만 널 (NULL)로 외래 키 속성을 선언

public class Students 
{ 
    //... 
    public int? ClassesId { get; set; } 
    public Classes Classes { get; set; } 
    public int? SectionsId { get; set; } 
    public Sections Sections { get; set; } 
} 

이 delete를 사용 가능하도록 계단식이 없기 때문에 기본 옵션 관계로 Students 클래스 경로를 삭제 여러 계단식의 문제를 해결하는 것입니다.ClassesSections 사이의 관계가 여전히 필요하므로 클래스를 삭제하면 해당 클래스에 속한 모든 섹션도 삭제되지만 학생을 더 이상 삭제하지는 않습니다.

+0

실제로 아이디어는 학교 구조를 만드는 것입니다 ... 학교에는 다양한 수업이 있으며 ... 각 수업에는 예를 들어 각기 다른 섹션이 있습니다. 첫 번째 표준 섹션 A, 첫 번째 표준 섹션 B, 두 번째 표준 섹션 A, 두 번째 표준 섹션 B, 두 번째 표준 섹션 C 등. 학생은 실제로 섹션에 속하며 섹션은 클래스에 속하지만 결국 학생들도 클래스에 속해 클래스에는 학생의 코드 번호로 참조되어야하므로 관계가 있어야한다고 생각합니다. 이 관계를 정의하는 다른 종류의 방법이 있으면 도움을주십시오. –

+0

그냥 거기에 추가하고 싶었습니다 ... 여기 클래스 크기가 크므로 섹션으로 나뉘어 있습니다 ... 예를 들어 첫 번째 표준에 80 명의 학생이있는 경우 첫 번째 섹션의 두 섹션 A와 B에 각각 40 명의 학생이 생깁니다. 표준 ... 학생이 학교에 등록한 경우 클래스에 속해야하고 클래스에 섹션이 클래스 내의 한 섹션에 속해야합니다 ... 섹션이 삭제되면 학생은 클래스의 기본 섹션으로 이동해야합니다. .. A 섹션을 말하라. 당신이이 모델 로직을 도와 주면 좋겠다. 대답 해줘서 고마워. :) –

+0

@AmitRaya : 나에게 모델이 실제로 괜찮은 것 같습니다. 'Students'와'Classes'와'Students'와'Sections' 사이의 관계에 대한 계단식 삭제를 비활성화하면됩니다. 기술적으로 필요한 것은 아니지만 사업 관점에서 삭제 삭제는 나에게 잘못된 것입니다. 수업을 삭제할 때 학생을 삭제해서는 안되며 다른 수업에 배정되어야합니다. – Slauma

관련 문제