如何删除Orchard中所有部分的内容项?

时间:2014-10-21 11:53:09

标签: c# orchardcms orchardcms-1.8

我是 Orchard CMS 和C#开发的新手。我正在尝试创建自己的新闻模块。 该模块将一些MenuItem注入AdminMenu,并提供管理站点新闻的功能。 我创建了NewsItem文档类型,其中包含TitlePartBodyPart和我自己的NewsPart

NewsPart基于NewsPartRecord,其中包含2个额外字符串字段SourceTitleSourceUrl

我遇到的问题是我无法完全删除我的内容项。 ContentManager.Remove(id)只是将项目版本标记为latest = false并隐藏它。但我不需要为我的文档项目存储旧版本和任何备份。它就像数据库中的垃圾。

在我的OnRemove中使用NewsPartHandler事件仅影响newsPartRecord表,其他部分如TitlePartBodyPart以及项目数据和版本仍然存在存在于数据库中。

如何完全删除ContentItem数据?

3 个答案:

答案 0 :(得分:3)

你不知道:Orchard只做软删除。这样您就可以取消删除,并恢复到以前的版本。在技​​术上可以清理已删除项目的数据库,但据我所知,没有人愿意这样做。

答案 1 :(得分:0)

改为使用IContentManager.Delete()并实现覆盖IContentHandler的{​​{1}}以删除部分数据等依赖关系。这应该可以解决问题。

答案 2 :(得分:0)

基于ViRuSTriNiTy's answer,此处理程序将删除任何内容项及其中任何内容项的所有部分记录:

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);
    }
}

请注意,对于自定义代码,当您要明确删除所有内容时,可以调用IContentManager.Destroy()而不是通常的IContentManager.Remove()