Orchardcms 果园核心级联删除

Orchardcms 果园核心级联删除,orchardcms,orchardcore,Orchardcms,Orchardcore,我创建了一个内容项“Company”,其中列出了部分项“Offer”。 当我删除该公司的所有产品时,子产品不会被删除,以后也没有办法删除(可能是在DB中手动删除,但这不是我想要实现的方式)。这些项目仍然可以在客户用户界面(Razor页面)中访问 以上所有操作都在Orchard管理面板中手动执行。我正在使用解耦cms模式 有没有可能让Orchard对这些项目进行级联删除?我刚刚准备了一些代码片段。也许这在你的背景下是合适的。首先,您应该使用ListPart作为泛型类型创建ContentPartHa

我创建了一个内容项“Company”,其中列出了部分项“Offer”。 当我删除该公司的所有产品时,子产品不会被删除,以后也没有办法删除(可能是在DB中手动删除,但这不是我想要实现的方式)。这些项目仍然可以在客户用户界面(Razor页面)中访问

以上所有操作都在Orchard管理面板中手动执行。我正在使用解耦cms模式


有没有可能让Orchard对这些项目进行级联删除?

我刚刚准备了一些代码片段。也许这在你的背景下是合适的。首先,您应该使用ListPart作为泛型类型创建ContentPartHandler,并重写RemoveAsync方法。然后可以获取所有列表项并将其删除(如下例所示)

公共类MyListPartHandler:ContentPartHandler
{
私人只读IOrchardHelper_orchardHelper;
私有只读服务器ViceProvider\u服务提供商;
public MyListPartHandler(IOrchardHelper orchardHelper、IServiceProvider服务提供商)
{
_果园助手=果园助手;
_服务提供者=服务提供者;
}
公共重写异步任务RemovedAsync(RemoveContentContext上下文,ListPart实例)
{
var items=await\u orchardheloper.querylistedmsasync(instance.ContentItem.ContentItemId);
var contentManager=_serviceProvider.GetService();
var tasks=items.Select(item=>contentManager.RemoveAsync(item));
等待任务。何时(任务);
}
}
最后,您应该在Startup类的ConfigureServices方法中注册处理程序

services.AddContentPart().AddHandler();

这很好,但您不能使用Task.Whallon一个YesSql.Session(或content manager Session)这样的任务,这样就不是线程安全的。