2011-03-27 2 views
26

Entity Framework에서 삭제 문제가 있습니다. 요컨대, EF가 명시 적으로 데이터베이스에서 계단식 삭제를 사용하도록 EF를 구성 했더라도 EF는 데이터베이스에서 엔티티를 명시 적으로 삭제하려고 시도합니다.Entity Framework에서 계단식 삭제 - EF에서 삭제 된 관련 엔터티

내 디자인 :

나는 세 가지 개체 유형, MainEntity, EntityTypeAEntityTypeB 있습니다. EF는 EntityTypeAEntityTypeB을 삭제할 때 계단식 삭제를 사용하도록 구성되었습니다. 즉, MainEntity의 인스턴스를 삭제하면 관련된 모든 EntityTypeAEntityTypeB 인스턴스도 삭제되기를 바랍니다. EntityTypeA 또는 EntityTypeB은 부모를 삭제하지 않고 삭제하지 않습니다.

내 문제는 EF가 EntityTypeA에 대해 DELETE 문을 명백하게 발행하여 응용 프로그램이 중단되는 것입니다.

이 내 모델이 어떻게 생겼는지입니다 :

관계 다음과 같은 비 기본 설정이 있습니다

  • MainEntity -> EntityTypeA OnDelete: Cascade
  • MainEntity -> EntityTypeB OnDelete: Cascade

의 관계를EntityTypeA -> EntityTypeBOnDelete: None

데이터베이스 내용을 가지고

INSERT INTO MainEntities (Name) values ('Test') 
insert into EntityTypeA (MainEntityID) VALUES (1) 
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1) 
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1) 

내 코드 : 내가 SaveChanges를, 엔티티 프레임 워크를 호출 할 때

를 어떻게됩니까

class Program 
{ 
    static void Main(string[] args) 
    { 
     var context = new Model1Container(); 
     var mainEntity = context.MainEntities.Include("EntityTypeA").SingleOrDefault(); 
     context.DeleteObject(mainEntity); 
     context.SaveChanges(); 
    } 
} 

실행 데이터베이스에 다음 EntityTypeB의 표 참조 EntityTypeA 인스턴스의 항목이 있기 때문에

exec sp_executesql N'delete [dbo].[EntityTypeA] 
where ([Id] = @0)',N'@0 int',@0=1 

이, 외래 키 위반이 발생합니다.

질문

내가 엔티티 프레임 워크가 계단식이 삭제 사용하도록 구성했습니다에도 불구하고 왜 엔티티 프레임 워크 문제가 명시 적 EntityTypeA의 예를 들어 삭제합니까? 포함 ("EntityTypeA")을 제거하면 다시 작동하기 시작합니다.

+10

이미지를 (모델의)입니다 귀하의 회신을 사용할 수 없습니다 – flipchart

답변

관련 문제