Orchardcms 在Orchard数据迁移中将字段添加到ContentType

Orchardcms 在Orchard数据迁移中将字段添加到ContentType,orchardcms,Orchardcms,我在数据迁移中创建了一个ContentType,它将几个ContentPart焊接在一起 在Orchard站点Content Admin上,我可以向ContentType(但不是ContentPart)添加字段,在数据迁移中,似乎只能向ContentPart(而不是ContentType)添加字段 我想在迁移中将该字段添加到ContentType中,以便使用placement.info控制其位置 也许这并不重要,还有另一种方法可以实现在迁移中添加字段,然后使用placement.info控制字段

我在数据迁移中创建了一个ContentType,它将几个ContentPart焊接在一起

在Orchard站点Content Admin上,我可以向ContentType(但不是ContentPart)添加字段,在数据迁移中,似乎只能向ContentPart(而不是ContentType)添加字段

我想在迁移中将该字段添加到ContentType中,以便使用placement.info控制其位置


也许这并不重要,还有另一种方法可以实现在迁移中添加字段,然后使用placement.info控制字段的放置位置,以及使用模板控制字段的外观。

您实际上无法将字段附加到内容类型。当您将其附加到管理UI中的内容类型时,Orchard会在幕后对您隐藏这一事实——它会在该内容类型内创建一个与内容类型同名的内容部分,然后将字段附加到新的内容部分

您可以通过管理员UI附加一个字段,然后转到导入/导出,并导出内容类型的元数据来验证这一点

要通过迁移附加字段,请执行相同的操作。如果您没有一个内容部分是附加字段的好地方,我使用的约定是创建一个与内容类型同名的内容部分,bug后缀为“part”。假设您的内容类型是“视频游戏”:


所有字段都附加到零件,而不是类型,因此您自然可以使用此迁移方法通过placement.info和模板控制放置,就像通过UI定义字段一样

谢谢,这有助于理解。对于上面的示例,placement.info是什么样子的?如果VideoGamePart中有两个字段,您仍然可以将它们分开放置吗?通过以下回答,您发现了如何将它们分开放置:您不需要在其后面加上“Part”。部件名称和内容类型必须完全相同。是。。。您应该使用相同的名称,否则如果您想更改某些内容,以后在编辑字段时会遇到问题。
ContentDefinitionManager.AlterPartDefinition(
    "VideoGamePart"
    , b => b
        .Attachable()
        .WithField("ThumbnailImage", cfg => cfg.OfType("MediaPickerField").WithDisplayName("Video game box cover image"))
);
// Type: 
ContentDefinitionManager.AlterTypeDefinition(
    "VideoGame"
    , cfg =>
        cfg
            .WithPart("VideoGamePart")
            .WithPart("IdentityPart")
            .WithPart("TitlePart")
            .WithPart("CommonPart")
            .Creatable()
);