2010-01-05 4 views
0

그래서 내 DB의 루트에 "고객"테이블이 있습니다. 고객은 Receipts, Addresses, Documents 등의 약 6-7 개의 다른 테이블로가는 외래 키를 가지고 있습니다. SubmitChanges()를 사용하여 고객을 삭제할 경우 해당 외래 키 연관과 함께 모든 레코드를 찾아 삭제할 수도 있습니다. 또는 6 개의 쿼리를 수행해야합니까?LINQ DB에서 삭제하면 외래 키 연결이있는 다른 테이블의 레코드도 삭제됩니까?

답변

2

이 작업은 계단식 삭제 (예 : on delete cascade)로 데이터베이스 테이블을 설정 한 경우에만 발생합니다. SQL에

LINQ가 지원하지 않거나 캐스케이드 - 삭제 작업을 인식 :

자세한 내용은 Insert, Update, and Delete Operations (LINQ to SQL)를 참조하십시오. 당신이 그것을에 대한 제약 조건이있는 테이블 에서 행을 삭제하려면 , 당신은 이 중 하나를 ON가 의 외부 키 제약의 데이터베이스를 CASCADE 규칙을 삭제 또는 먼저 삭제 에 자신의 코드를 사용하여 설정해야 자식 개체 부모 개체를 방지하는 삭제되었습니다. 그렇지 않은 경우 예외는 입니다.

0

외래 키 관계에 어떤 종류의 계단식 조치가 있습니까?

기본적으로 대부분의 데이터베이스 시스템 (내가 사용하는 것으로 추정되는 SQL Server 포함)에는 "ON DELET CASCADE"또는 다른 작업이 없으므로 아무 일도 일어나지 않습니다.

이 T-SQL 쿼리는 당신에게 당신의 외래 키 관계를 보여줍니다 및 DELETE 또는 UPDATE 참조 동작은 정의되어 있는지 여부 : 당신이 일이 발생 할 경우

SELECT 
    name 'FK Constraint', 
    OBJECT_NAME(parent_object_id) 'Parent table', 
    OBJECT_NAME(referenced_object_id) 'Referenced table', 
    delete_referential_action , 
    delete_referential_action_desc , 
    update_referential_action , 
    update_referential_action_desc 
FROM 
    sys.foreign_keys 

, 당신은 할 필요가 FK 릴레이션이 계단식 액션을 사용하도록 설정되었는지 확인하십시오.

자세한 내용은 MSDN 문서 Cascading Referential Integrity Constraints을 참조하십시오.

관련 문제