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

C# 如何删除Orchard中所有部分的内容项?,c#,orchardcms,orchardcms-1.8,C#,Orchardcms,Orchardcms 1.8,我刚接触过果园CMS和C#development。我正在尝试创建自己的新闻模块。 该模块将一些菜单项注入AdminMenu,并提供管理站点新闻的功能。 我创建了一个新闻项目文档类型,它由标题部分、正文部分和我自己的新闻部分组成 NewsPart基于NewsPartRecord,它包含两个额外的字符串字段SourceTitle和SourceUrl 我面临的问题是无法完全删除我的内容项ContentManager.Remove(id)只需将项目版本标记为latest=false并将其隐藏。但我不需要

我刚接触过果园CMS和C#development。我正在尝试创建自己的新闻模块。 该模块将一些菜单项注入AdminMenu,并提供管理站点新闻的功能。 我创建了一个
新闻项目
文档类型,它由
标题部分
正文部分
和我自己的
新闻部分
组成

NewsPart
基于
NewsPartRecord
,它包含两个额外的字符串字段
SourceTitle
SourceUrl

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

在my
NewsPartHandler
中使用
OnRemove
事件只会影响
newsPartRecord
表,数据库中仍然存在其他部分,如
TitlePart
BodyPart
以及项目数据和版本


如何完全删除
ContentItem
数据?

您没有:Orchard只进行软删除。通过这种方式,您可以取消删除,并恢复到以前的版本。从技术上讲,清除数据库中已删除的项目是可能的,但据我所知,没有人愿意这样做。

使用
IContentManager.Delete()
,并实现
IContentHandler
,它覆盖
销毁的()
,以删除零件数据等依赖项。这应该可以解决问题。

基于,当删除任何内容项及其所有部分记录时,此处理程序将销毁这些内容项及其所有部分记录:

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()

谢谢您的回答!我读过关于软删除的文章,但这对我来说似乎很奇怪,因为它会导致数据库中出现一些垃圾。经过一周的Orchard学习,整个概念对我来说似乎过于复杂,看起来它是为最终用户设计的,而不是为开发人员设计的。这会导致实际问题吗?这取决于网站的类型,在某些情况下可能是。我不同意这一点。Orchard是为开发者设计的,不是为最终用户设计的。尽管我也认为应该存在硬删除,尤其是删除真正的旧数据或不再存在的内容类型的数据。