2011-10-25 2 views
8

두 테이블 Application_User 및 Application_User_Access가 있습니다. Application_User_Access 테이블에 Application_User 테이블로 외래 키 제약 조건이 있습니다.DELETE 문이 ASP.NET 동적 데이터의 REFERENCE 제약 조건과 충돌했습니다.

Application_User 테이블에서 레코드를 삭제하면 "DELETE 문이 REFERENCE 제약 조건과 충돌합니다."예외가 발생합니다.

ASP.NET 동적 데이터 엔터티 웹 응용 프로그램에서 발생합니다. 이 경우 모든 하위 레코드를 삭제하고 마지막으로 상위 레코드를 삭제하고 싶습니다. 이것을 구현하는 방법?

답변

12

Application_User_Access 테이블에 대한 계단식 삭제를 구현할 수 있습니다. 이를 위해서는 DB 스키마를 약간 수정해야합니다. 구체적으로 Application_User 테이블에 Application_User_Access에서 이전 참조를 제거하고 새로운 하나를 추가

--not sure about the column names though 

ALTER TABLE Application_User_Access 
ADD CONSTRAINT FK_Application_User_Access_Application_User 
FOREIGN KEY (used_id) 
REFERENCES Application_User(id) 
ON DELETE CASCADE 
GO 

공지 것은 ON DELETE CASCADE 있음을. 즉, 기본 키 레코드가 삭제 될 때마다이를 참조하는 외래 키 레코드도 제거됩니다.

+0

내 컨텍스트의 부분 클래스에서 아래 코드로 OnSavingChanges 메서드를 추가했습니다. – Anand

+1

음, 이것이 가능한 접근 방법이지만 약간의 결함이 있습니다. 'Application_User_Access' 레코드는'Application_User' 없이는 의미가 없습니다. 이것은 비즈니스 규칙이 아니며 DB 무결성의 문제입니다. 그렇기 때문에 캐스케이드 삭제를 추가하여 제약 조건을 수정하는 것이 여기서 조금 더 효과적이라고 말할 수 있습니다. 그러나 결국 당신은 가장 편안하게 접근하는 접근 방식으로 가야합니다. – Andrei

+0

ON DELETE CASCADE로 변경하면 작동하지 않습니다. – MindBrain

관련 문제