>

테이블 :

Shop
Product
Category

관계 :

     (Shop) 1 <---> n (Categories)
      (Shop) 1 <---> n (Products)
(Categories) n <---> n (Products)

캐스케이드 삭제 :

     Shop  ---> Categories ... I defined this using fluent API
      Shop  ---> Products   ... I defined this using fluent API
Categories <---> Products   ... EF 4.1 automatically defines cascade for "Category_Product" join table

문제 : 위의 "다중"계단식 삭제 경로 예외가 발생합니다.

잠재적 수정 :

<올>
  • ManyToManyConvention을 제거하되, 시스템의 모든 조인 테이블에 대해 수동으로 삭제를 수행해야하므로 실용적이지 않습니다.
  • Shop->Category 또는 Shop->제품에서 계단식 삭제를 제거 할 수 있습니다. 하지만 고아 레코드가 많이있을 것입니다.
  • 이 문제를 처리하는 사람들은 어떻습니까?

    감사합니다

    • 답변 # 1

      이것은 엔터티 프레임 워크의 문제가 아니라 SQL Server의 문제입니다. 예외가 실제로 순환 연속 삭제를 의미한다고 생각하지 않습니다. 상점에서의 계단식으로 인해 결합 테이블 레코드가 카테고리 및 제품 측에서 모두 삭제 될 수 있기 때문에 다중 계단식 삭제 경로를 의미 할 수 있습니다. 캐스케이드 할 때 삭제해야하는 레코드와시기를 정확하게 계산하려면 좀 더 복잡한 알고리즘이 필요하기 때문에 SQL 서버에서는이를 허용하지 않습니다.

      단순히이 문제를 해결해야하며 상점을 삭제하기 전에 모든 관련 레코드 (카테고리 또는 제품)를 수동으로 삭제해야합니다. 저장 프로 시저 (또는 직접 SQL DELETE 명령)가 필요합니다. 그렇지 않으면 먼저 모든 프로 시저를로드하고 하나씩 삭제해야합니다.

      수정 :

      주석에서 지적한 것처럼 하나의 캐스케이드 경로를 대체 할 경우 관련 레코드를 삭제하는 BEFORE DELETE 트리거를 추가하여 해결할 수도 있습니다.

    관련 자료

  • 이전 c# - Android 애플리케이션에서 Android 용 Mono 클래스를 호출하는 방법은 무엇입니까?
  • 다음 ruby - Rails로 Facebook 애플리케이션을 구축하기위한 현재 리소스는 무엇입니까?