2012-12-09 2 views
6

ICollection<Orders>에 최대 50000 개의 주문을 가진 Customer 개체가 있습니다. 주문이 로컬 캐시에 있다고 가정합니다. Cutomer 및 모든 관련 주문을 고객 주문을 모두 캐시에로드하지 않고 setDeleted()으로 표시하지 않고 어떻게 삭제할 수 있습니까? 가장 좋은 방법은 무엇입니까? 나는 public SaveResult SaveChanges(JObject saveBundle) 메서드를 확장하는 것이 가장 좋은 방법이라고 생각합니다. 클라이언트 측의 다른 가능성은 깃발 delete_all_navigation_too()과 같은 것입니까?엔티티 및 해당 네비게이션 속성 삭제

감사

답변

5

내가 생각해 낼 수있는 가장 간단한 접근법은 데이터베이스에서 계단식 삭제 제약 조건을 생성하여 고객이 삭제되었을 때 모든 주문이 삭제되도록하는 것입니다. 그런 다음 클라이언트에서 고객을 삭제하고 'SaveChanges'를 호출하십시오. 또한 Breeze는 클라이언트 쪽 '계단식'삭제 (아직 고려하지 않음)를 지원하지 않으므로 이미로드 된 클라이언트 측 주문을 반복하고 '분리'해야합니다.

+0

두 제안 모두에게 감사드립니다. 나는 2 개의 답을 맞다고 받아 들일 수 없기 때문에 나는 이것을 무작위로 선택했다. –

+0

오 사샤! 어떻게 제이를 택할 수 있겠습니까? :-) – Ward

+0

제이가 무작위로 이겼을 때까지 동전을 던지고있었습니다 ^^. 미안 구, 제이에게 신용을 줘야 했어. 당신의 명성은 하늘 높이였습니다. 배지 수가 너무 많아 장군이 질투했습니다. 다음에 당신이 이길 때, 나는 약속한다. :) –

6

나는 당신이 없어 폭포가 데이터베이스에서 삭제하지 않을 것을 가정해야합니다. 개인적으로, 나는 일반적으로 삭제에 대해 "겁에 질려"있고 그들을 피하려고 노력한다. 필자는 소프트 삭제 (기록을 비활성으로 표시)를 선호합니다. 하지만 모두가 동의하지 않거나 따를 수 있습니다.

컨트롤러에 웹 API 메소드 (예 : "DeleteCustomerAndOrders")를 추가하는 것이 좋습니다. Breeze 메소드뿐만 아니라 클라이언트에서 API 메소드를 호출 할 수 있습니다.

추천 할 때이 유형의 앱이 앱에서 상대적으로 드문 경우입니다. 일반적인 목적의 Deleter, 부모 개체 ID의 배열을 취하는 삭제 자, 일부 자식 개체를 삭제하는 삭제 자, 기타 등등이 필요하지 않습니다.

이 경로를 따라 문제를 클라이언트에서 서버로 옮겼습니다. 좋습니다. 고객에게 주문을로드 할 필요가 없었습니다. 이제 서버에서 제거해야합니다. Entity Framework를 사용하는 경우 주문을로드하지 않고 삭제하는 것과 동일한 문제가 있습니다. Alex James의 해결책을 확인하십시오 : Bulk-deleting in LINQ to Entities.

관련 문제