C# 如何删除Orchard中所有部分的内容项?
我刚接触过果园CMS和C#development。我正在尝试创建自己的新闻模块。 该模块将一些菜单项注入AdminMenu,并提供管理站点新闻的功能。 我创建了一个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并将其隐藏。但我不需要
新闻项目
文档类型,它由标题部分
、正文部分
和我自己的新闻部分
组成
NewsPart
基于NewsPartRecord
,它包含两个额外的字符串字段SourceTitle
和SourceUrl
我面临的问题是无法完全删除我的内容项ContentManager.Remove(id)
只需将项目版本标记为latest=false
并将其隐藏。但我不需要为我的文档项存储旧版本和任何备份。它就像数据库中的垃圾
在myNewsPartHandler
中使用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是为开发者设计的,不是为最终用户设计的。尽管我也认为应该存在硬删除,尤其是删除真正的旧数据或不再存在的内容类型的数据。