我是 Orchard CMS 和C#开发的新手。我正在尝试创建自己的新闻模块。
该模块将一些MenuItem注入AdminMenu,并提供管理站点新闻的功能。
我创建了NewsItem
文档类型,其中包含TitlePart
,BodyPart
和我自己的NewsPart
。
NewsPart
基于NewsPartRecord
,其中包含2个额外字符串字段SourceTitle
和SourceUrl
。
我遇到的问题是我无法完全删除我的内容项。 ContentManager.Remove(id)
只是将项目版本标记为latest = false
并隐藏它。但我不需要为我的文档项目存储旧版本和任何备份。它就像数据库中的垃圾。
在我的OnRemove
中使用NewsPartHandler
事件仅影响newsPartRecord
表,其他部分如TitlePart
,BodyPart
以及项目数据和版本仍然存在存在于数据库中。
如何完全删除ContentItem
数据?
答案 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()
。