2012-11-10 2 views
1

나는이 모델이있다!한 제로 많은 폭포를 삭제

원하는 사항 : - 모든 회사는 선택 로고 또는 카탈로그를 보유하고 있으며 모든 광고에는 선택적인 그림이 있습니다. - FileUpload 레코드를 직접 삭제할 수 있습니다. - 캐스케이드 삭제

어떻게해야합니까?!

+0

당신이 많은 고맙습니다 _not의 working_ – Eranga

답변

2

Company 또는 Ads이 삭제 될 때 FileUpload이 계단식 삭제로 삭제되기를 원합니 까?

이것은 FileUpload이 세 관계 모두에서 주체이고 CompanyAds이 종속되어 있기 때문에 의미가 없습니다. 종속이 삭제 될 때 주체를 계단식으로 삭제할 수 없습니다. 어쨌든 일대 다 관계에서는 FileUpload이 많은 다른 회사 또는 광고에서 사용될 수 있기 때문에 대부분의 경우 실패합니다. 그 중 하나를 삭제하고 FileUpload이 계단식으로 삭제되면 다른 회사 및 광고의 외래 키 제약 조건을 위반하게됩니다.

모델에서 FileUpload이 삭제 될 때 CompanyAds이 삭제되도록 계단식 삭제 만 할 수 있습니다 (이상한 소리). 심지어 두 개의 관계로 복수 계단식 삭제 경로를 FileUpload에서 Company으로 구성했기 때문에 Fluent 매핑에서이 작업을 수행 할 수 없습니다. SQL Server는 이러한 관계를 허용하지 않습니다. 적어도 하나의 계단식 삭제를 제거해야합니다. CompanyAds A는 FileUpload가 다른 회사 또는 광고에서 사용하지 않는 경우 체크 한 후 삭제 될 때 모델에서

은 수동으로 FileUpload 기록을 삭제해야합니다.

FileUpload이 둘 이상의 회사 또는 광고에서 사용될 수없고 회사가 광고를 통해 사용하지 않았으며 광고를 통해 사용 된 적이 없다는 것을 알고 계시면 간단합니다. 회사) 삭제 :

using (var context = new TestContext()) 
{ 
    var company = context.Companies 
     .Include(c => c.Logo) 
     .Include(c => c.Catalog) 
     .Single(c => c.CompanyId == companyIdToDelete); 

    if (company.Logo != null) 
     context.FileUploads.Remove(company.Logo); 

    if (company.Catalog != null && company.Logo != company.Catalog) 
     context.FileUploads.Remove(company.Catalog); 

    context.Companies.Remove(company); 
} 
+0

무엇을 의미하는 설명을 ... 난 내 프로젝트에 이런 짓을하지만 ... 내가 그것을 가지고 당신의 좋은에 대한 고맙습니다 :) 설명) –

관련 문제