2010-08-04 3 views
3

(간단한 접합 테이블을 사용하여) 많은 관계가 많은 데이터베이스에 두 개의 개체 (클래스, 학생)가 있습니다. 테이블에 새 객체를 올바르게 추가하는 방법을 알아 냈습니다. 이제 객체를 삭제하고 싶습니다.엔티티 프레임 워크에서 많은 관계가 많은 개체를 삭제 하시겠습니까?

내가하려고했는데 다음 오류를 제공

// (a classobj with id==1 does exist) 
ClassObj cl = (from c in entities.ClassObjs where c.ClassID == 1 select c).First(); 
entities.ClassObjs.DeleteObject(cl); 
entities.SaveChanges(); 

:

JunctionClassObjsStudents 클래스와 사이에 많은 관계로 많은 생성 접합 테이블의 이름입니다
"The DELETE statement conflicted with the REFERENCE constraint \"FK_JunctionClassObjsStudents_Students\". 

학생 표.

무엇을해야합니까? 당신의 도움을 주셔서 감사합니다!!

답변

2

하나의 솔루션은 FK에 캐스케이드 (또는 SET NULL)를 넣은 다음 엔티티 모델을 재생성하는 것입니다.

+0

답변 해 주셔서 감사합니다! 캐스케이드 삭제에 대해 들었습니다. (그게 무슨 뜻인지 생각해보십시오.)하지만 다른 사람들과 관련이 있어도 삭제 된 것과 관련된 모든 객체를 삭제하는 것이 나의 이해입니다. 기본적으로이 예에서는 클래스를 삭제 한 경우 다른 클래스와 관련되어 있어도 해당 클래스와 관련된 학생이 삭제됩니까? – Evan

+0

계단식은 엔티티가 아닌 관계 *를 삭제합니다. –

+0

멋진 :), 시도합니다! – Evan

0

ClassObj을 참조하는 각 StudentObj을 거쳐 참조를 제거해야합니다. 이는 참조 무결성을 유지하는 데 필요합니다.

+0

나는 모든 클래스와 모든 학생을 삭제 한 다음 엔티티 .SaveChanges() (두 개의 foreach 문과 컬렉션을 사용하여 루프 내에서 deleteobject 호출)를 삭제하려고 시도했지만 여전히 동일한 오류 메시지가 표시됩니다. 어떤 아이디어? – Evan

0

... 내가 제대로 이해 한 가정 (그 큰 가정이다)

클래스 표 -> Class_Student_Junction 표 < - 학생 표 당신이 할 필요가있을 것이다 나에게 보인다

두 단계로 내 마음에 문제가 당신이 만든 접합 테이블입니다 제약이 있습니다. 내가 말할 것 코드 ...

1 단계로를주지 않고 : 삭제하려는 클래스의 키를 참고

2 단계 : 클래스에 대한 외래 키가를 접합 테이블에서 모두 동일 삭제 경우 클래스 1에서 클래스를 삭제하십시오.

3 단계 : 클래스 테이블에서 클래스 레코드를 삭제하십시오. 그 순서대로 중요한 위반이 없어야합니다.

+0

하하하, 네가 날 이해해. :) 귀하의 답변에 감사드립니다. 엔티티 프레임 워크에서 접합 테이블에서 직접 삭제하는 방법은 무엇입니까? 데이터베이스로 직접 작업하지 않고도 설명 된 작업을 수행 할 수있는 방법이 있습니까? – Evan

관련 문제