2014-10-21 1 views
2

저는 오차드 CMS 및 C#을 처음 사용했습니다. 나 자신을 만들려고 노력하고있다 뉴스 모듈. 모듈은 Admin Menu에 몇 개의 MenuItem을 삽입하고 사이트 뉴스를 관리하는 기능을 제공합니다. 나는 TitlePart, BodyPartNewsPart으로 구성된 NewsItem 문서 유형을 만들었습니다.오차드에서 모든 부품이있는 콘텐츠 항목을 삭제하려면 어떻게해야합니까?

NewsPartNewsPartRecord을 기반으로하며 두 개의 추가 문자열 필드 SourceTitleSourceUrl을 보유합니다.

전 콘텐츠 항목을 완전히 삭제할 수없는 문제에 직면했습니다. ContentManager.Remove(id)은 항목 버전을 latest = false으로 표시하고 숨 깁니다. 하지만 이전 버전과 내 문서 항목에 대한 백업을 저장할 필요가 없습니다. 그것은 DB의 쓰레기와 같습니다. 내 NewsPartHandlerOnRemove 이벤트를 사용

에만 newsPartRecord 테이블 및 TitlePart, BodyPart 및 항목 데이터 및 버전은 아직 데이터베이스에 존재하는 같은 다른 부분에 영향을 미친다.

ContentItem 데이터를 완전히 제거하려면 어떻게해야합니까?

답변

3

귀하는 다음을 수행하지 마십시오 : 과수원은 연약한 삭제 만합니다. 이렇게하면 삭제를 취소하고 이전 버전으로 되돌릴 수 있습니다. 기술적으로 삭제 된 항목의 데이터베이스를 정리하는 것은 가능하지만 내 지식으로는 아무도이 작업을 수행하지 않았습니다.

+0

답변 해 주셔서 감사합니다. 나는 부드러운 삭제에 대해 읽었지 만 DB에서 약간의 쓰레기로 연결되는 것은 이상하게 보입니다. Orchard를 배운 후 일주일이 지나면 전체 개념이 지나치게 복잡해 보입니다. 최종 사용자를위한 것이지 개발자를위한 것이 아닙니다. – teran

+0

실제 문제가 발생합니까? –

+1

사이트 유형에 따라 다르며 경우에 따라 다를 수 있습니다. – teran

0

대신 IContentManager.Delete()을 사용하고 Destroyed()을 덮어 쓰는 IContentHandler을 구현하여 부품 데이터와 같은 종속성을 제거하십시오. 이것은 트릭을해야합니다. 그들 중 누군가가 제거 될 때

0

ViRuSTriNiTy's answer을 바탕으로,이 핸들러 모든 콘텐츠 항목의 모든 부분의 기록을 파괴 할 것이다 : 사용자 정의 코드, 대신 평소 IContentManager.Remove() 때의 IContentManager.Destroy()를 호출 할 수 있습니다

public class PermanentRemoveContentHandler : ContentHandler 
{ 
    private readonly IOrchardServices _orchardServices; 

    public PermanentDeleteContentHandler(IOrchardServices orchardServices) 
    { 
     this._orchardServices = orchardServices; 
    } 

    protected override void Removed(RemoveContentContext context) 
    { 
     this._orchardServices.ContentManager.Destroy(context.ContentItem); 
    } 
} 

하는 것으로 명시 적으로 모든 것을 삭제하려고합니다.

관련 문제