Entity Framework에서 삭제 문제가 있습니다. 요컨대, EF가 명시 적으로 데이터베이스에서 계단식 삭제를 사용하도록 EF를 구성 했더라도 EF는 데이터베이스에서 엔티티를 명시 적으로 삭제하려고 시도합니다.Entity Framework에서 계단식 삭제 - EF에서 삭제 된 관련 엔터티
내 디자인 :
나는 세 가지 개체 유형, MainEntity
, EntityTypeA
및 EntityTypeB
있습니다. EF는 EntityTypeA
및 EntityTypeB
을 삭제할 때 계단식 삭제를 사용하도록 구성되었습니다. 즉, MainEntity
의 인스턴스를 삭제하면 관련된 모든 EntityTypeA
및 EntityTypeB
인스턴스도 삭제되기를 바랍니다. EntityTypeA
또는 EntityTypeB
은 부모를 삭제하지 않고 삭제하지 않습니다.
내 문제는 EF가 EntityTypeA
에 대해 DELETE
문을 명백하게 발행하여 응용 프로그램이 중단되는 것입니다.
이 내 모델이 어떻게 생겼는지입니다 :
관계 다음과 같은 비 기본 설정이 있습니다
MainEntity -> EntityTypeA OnDelete: Cascade
MainEntity -> EntityTypeB OnDelete: Cascade
의 관계를EntityTypeA -> EntityTypeB
는 OnDelete: 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")을 제거하면 다시 작동하기 시작합니다.
이미지를 (모델의)입니다 귀하의 회신을 사용할 수 없습니다 – flipchart