Orchardcms 果园连接部分

Orchardcms 果园连接部分,orchardcms,orchardcms-1.6,Orchardcms,Orchardcms 1.6,我有一个复杂的场景,我正在尝试使用Orchard CMS部件进行建模 现在,这是一个简化的版本来澄清我的问题 例如,我有一个部件名PersonPart,它只有一个属性:name。 我还有另一个部分包含person角色,将其命名为PersonRolePart,并且只有一个属性role 在Orchard中,我创建了所有适当的管道(处理程序、驱动程序、视图…) 在迁移中,我创建了一个名为Person的新内容类型,它包含这两个部分 ContentDefinitionManager.AlterTypeDe

我有一个复杂的场景,我正在尝试使用Orchard CMS部件进行建模

现在,这是一个简化的版本来澄清我的问题

例如,我有一个部件名PersonPart,它只有一个属性:name。 我还有另一个部分包含person角色,将其命名为PersonRolePart,并且只有一个属性role

在Orchard中,我创建了所有适当的管道(处理程序、驱动程序、视图…)

在迁移中,我创建了一个名为Person的新内容类型,它包含这两个部分

ContentDefinitionManager.AlterTypeDefinition("Person", cfg => cfg
                       .WithPart("PersonPart")
                       .WithPart("PersonRolePart")
                       .WithPart("CommonPart")
                       .Creatable(false)  );
到目前为止,很好,我可以创建一个新的人并编辑这两个部分

我拥有的另一个部件是绑定到上面定义的PersonRoleParts之一的ServicePart

现在的问题是:

出于报告目的,我需要按PersonRole获取所有服务,并获取属于该角色的个人详细信息,或者换句话说,获取上面定义的person复合类型中使用的所有(实际上只有一个)PersonPart

怎么做

现在,在一个非果园的世界里,我会在2之间创建一个简单的1:1关系

到目前为止,我的(失败)尝试是将PersonRoleRecord_Id字段添加到PersonPartRecord,并将PersonRecord_Id添加到Person角色。。。但我不知道如何在驱动程序或处理程序上设置正确的id,因为两者都只看到自己的部分

是否可以从驱动程序中获取内容类型中其他部件的实例

无法合并人员和角色。这个场景要比这个复杂得多,我需要一个相同的人物角色,一个3个不同角色的角色,用于不同的目的,我希望避免重复普通人数据3次


另一个想法是创建一个合适的处理程序,但我不知道如何为虚拟内容类型创建一个处理程序,就像我所做的那样。

我已经设法使用另一个问题的建议解决了另一个问题(验证)。

因此,我的解决方案是向这两个部分添加一个处理程序,并强制转换该部分,并设置对另一部分的适当引用

        OnPublishing<PersonPart>((context, part) =>{
            var person = part.As<PersonPart>();
            var role= part.As<PersonRolePart>();
            if (person != null && role != null) {
                if (role.Person == null) {
                    role.Person = person.Record;
                }
            }
        });
OnPublishing((上下文,部分)=>{
var person=part.As();
var role=part.As();
if(person!=null&&role!=null){
if(role.Person==null){
role.Person=Person.Record;
}
}
});
在这个特定的例子中,因为它是一个1:1的关系,所以我只使用组合部分,两个id都是相同的,至少如果角色只是一种类型的话。
我会看看什么时候我会创建更多类似角色的部分。

你应该读这篇文章,谢谢,我知道那篇文章,但没有提到1:1的情况……不清楚你为什么不使用,或者至少从Orchard.Users和Orchard.Roles(已经实现了所有这一切)中获得灵感。用户和角色是一种多方面的关系。用户和角色是松散耦合的。在我的情况下,有一个更强大的1:1的关系。在某种程度上,这是一项比用户/角色实现简单得多的任务,至少在我找到的解决方案中是这样。。。整个项目比这更复杂,不适合用户/角色范式,否则我会利用现有的用户/角色模块,而无需更多编码。