2012-01-30 2 views
13

유형별 상속 테이블이있는 DB 모델이 있습니다. 예를 들어 엔티티는 A, B, C, A1, A2입니다. 베이스 - A 파생 된 - A1, A2. Another - B, C. 따라서 A는 A1과 A2에 대해 1 : 1로 연관되어 있습니다. B와 C에는 각각 A1과 A2에 대한 연관이 있습니다 (DB 측의 OnDelete 동작과 함께 많은 수의 1 개).엔티티 프레임 워크에서 계단식 삭제 (유형별 상속 테이블)

문제

나는 B에서 레코드를 삭제하려고, 그래서 EF는 현재 B의 기록에 관련된 모든 A1 개체를 제거 것으로 기대합니다. 결국

는, EF는 A1에서 B와 관련된 모든 기록에서 레코드를 제거,하지만 왜

에서? 어떻게 고쳐?

+0

제안 사항? 나는 그것이 사소한 문제라고 생각한다. – Developex

답변

7

알려진 문제이므로 버그라고 부릅니다. 분명히 파생 된 엔티티의 속성에 대한 테이블 A1의 레코드 만 삭제할 수 있습니다. 데이터베이스의 나머지 데이터 (표 A)는 다른 오브젝트 유형을 나타냅니다. 즉,이 DELETE는 엔티티를 실제로 삭제하지는 않지만 엔티티의 타입을 변경했습니다. 타입이 A1 인 오브젝트를 A 타입의 오브젝트로 변환했습니다. A이 추상 엔티티인지 여부는 훨씬 더 적합하지 않습니다.

here에서 권장 해결 방법은 (제가 이해) 못생긴 :

var b = context.Bs.Include("A1s").Single(b => b.Id == 1); 
foreach (var a1 in b.A1s.ToList()) 
    context.As.Remove(a1); 
context.Bs.Remove(b); 
context.SaveChanges(); 

context.As.Remove(a1);

하여 테이블 A에서 분리 된 레코드의 문제를 해결, 모두 AA1 테이블에서 삭제해야합니다. 불행히도 부모를 올바르게 삭제하려면 데이터베이스에서 하위 항목을로드해야합니다. 여기

은이 문제에 대한 또 다른 질문과 대답 : 저도 같은 문제가 있었다 Problems using TPT (Table Per Type) in EF 4.2 and deletion of parent objects

+0

감사합니다. mictosoft 팀이이 버그에 대해 알고 있었습니까? :) 그것이 고쳐질 언제 알 수 있습니까? 이 방법은 매우 추악하기 때문입니다. 하지만 작동합니다 :) – Developex

+0

@ user861108 : 아니, 수정 될 경우 또는 나는 모른다. 나는 MS가 그 문제를 버그라고 생각하는지조차도 모른다. – Slauma

+0

그 상황에서 다른 유형의 상속을 사용하면 모두 괜찮을 것이라고 생각합니다. 유형 당 상속을 사용했습니다. 어쩌면 계층 당 테이블을 사용한다면이 문제는 발생하지 않을 것입니다. 어떻게 생각해 ? – Developex

0

및 동료 (O)를 제거하기 전에 항목의 컬렉션을 반복하라고 갑자기 모든 일했다.

관련 문제