2011-12-20 4 views
0

오케이. 나는 구조가 가정엔티티 프레임 워크 - id로 관련 레코드를 제거하십시오.

학교 -> 학생 -> StudentParents < - 부모 -> 주소

학교는 많은 학생들을 가질 수 있습니다, 학생들이 친척 일 수 있고 (부모의 같은 세트가 히게 다 대다). 각 부모는 여러 개의 주소를 가질 수 있습니다.
같은 학부모를 가진 학생들은 다른 학교에서 공부할 수 없다고 가정하십시오.

주어진 school_Id = 5 인 경우이 학교 및 모든 관련 기록을 삭제하고 싶습니다. Entity Framework 4에서이 작업을 쉽게 수행하는 방법은 무엇입니까?

+0

가능한 복제본 [특정 엔터티와 관련된 모든 엔터티를 삭제하려면 어떻게합니까?] (http://stackoverflow.com/questions/8557679/how-do-i-delete-all-the-entities-related- to-a-specific-entity) – Eranga

답변

2

질문에 대한 답변은 this question과 같을 것입니다.

잘못된 레이어에서 문제를 해결하려고합니다. 참조 무결성을 유지 관리하는 방법에 대해 데이터베이스 디자인을 다시 고려해야합니다.

외부 키의 "CASCADE DELETE"를 설정하고 엔터티 모델에 을 반영해야합니다. 그런 다음 엔티티를 삭제할 때 데이터베이스가 참조 무결성을 유지하기 위해 필요한 변경을 수행합니다 ( ).

0

엔터티 프레임 워크는 메모리에서 개체로 인스턴스화되지 않은 데이터베이스에서 데이터를 삭제할 수 없습니다. 즉, 학교 데이터, 모든 학생 데이터, 모든 학생 부모 데이터 등을로드해야하므로 모든 데이터를 수동으로 삭제해야합니다.

에 매핑 된 데이터베이스의 저장 프로 시저를 사용하여이 데이터를 모두 삭제하면 필요하지 않으므로이 방법을 사용하면이 문제를 해결할 수 있습니다. 모든 데이터를 메모리에 저장합니다.

그러나 이것은 또한 골칫거리로 보입니다. 가장 좋은 방법은 Cascade delete을 데이터베이스에 적용하고 엔터티 프레임 워크의 모델에도 매핑하는 것입니다. 여기에는 두 가지 장점이 있습니다. 학교 데이터 만로드해야하고 모델에서 삭제 된 후에는 데이터베이스에서 삭제되고 계단식 삭제는 참조 데이터를 모두 삭제합니다. 그러나 학교 및 학생 데이터가 이미 메모리에있는 경우 EF은 메모리에서 해당 객체를 삭제 된 것으로 표시하여 데이터가 데이터베이스 상태와 일치하도록합니다.

이 문제의 최상의 해결 방법은 데이터베이스 수정 여부에 따라 다릅니다. 가능한 경우 cascade delete으로 이동하십시오. 당신이 할 수 없다면 - 나는 성능이 좋다고 가정하고 데이터베이스에 학부모 등 많은 학생들이있는 것으로 가정하여 stored procedure 접근법을 권장합니다.