2012-01-30 5 views
5

Northwind 예제 데이터베이스를 사용하고 있습니다. 계단식가을 삭제하여, 주문 정보 - Entity Framework 계단식 삭제 및 지연로드

  • var db = new NorthwindEntities(); 
    int id = 2; // Example 
    var delObject = (from o in db.Orders.Include("Order_Details") 
           where o.OrderID == id 
           select o).First(); 
    db.Orders.DeleteObject(delObject); 
    db.SaveChanges(); 
    
    내가 주문에 (1 대 다수) 협회가 :이 코드가 있습니다. (하나의 주문을 삭제하면 동일한 주문 ID를 가진 모든 Order_Details가 삭제됩니다).

  • 나는 지연 백신을 사용할 수 있습니다.

from 절에서 .Include("Order_Details")을 삭제하면 계단식 삭제가 작동하지 않습니다.

왜 이런 일이 발생합니까? 게으른 초기화가 나를 위해 Order_Details를 "포함"한다고 가정하지 않고, 결국 내가 케스케이드 삭제를 허용합니까?

+0

아니요. 내 경험에 따르면 계단식 삭제는 메모리 개체에만 적용됩니다. – cadrell0

답변

5

계단식 삭제는 EF 모델에서 정의됩니다.

따라서 EF는로드 한 데이터에 대해 delete 문을 생성합니다. EF는 삭제해야 할 내용을 확인하기 위해 데이터베이스로 이동하지 않습니다.

데이터베이스 수준에서 계단식 삭제 (데이터베이스에 따라 다름)를 정의 할 수 있습니다. 이 경우 EF는 맨 위 노드를 삭제하고 데이터베이스는 관련 행을 삭제합니다.

1

데이터베이스와 엔티티 구성 모두에 계단식 삭제가 정의되어 있습니까? 나는 하나만 정의하고 다른 하나는이 문제를 일으킬 수있는 곳을 보았다.

+0

사실, 그것이 작동하게 만들었지 만, 왜 이런 일이 발생합니까? – ColdFusion

1

EF 모델에서 계단식 삭제는 컨텍스트에서로드 된 세부 정보 만 삭제합니다. 당신이 사용하는 경우 주문 포함과 함께 쿼리 중에 Order_Details가로드됩니다. LazyLoading을 사용하도록 설정하고 포함을 사용하지 않으면 필요에 따라 (예 : 탐색 속성을 참조 할 때)로드됩니다. 따라서 세부 사항을 신경 쓰지 않고 마스터 레코드로 자동 삭제되도록 동의하는 경우 EF 모델과 DB 스키마 모두에서 계단식 삭제를 정의해야합니다.