如何将两个或多个功能合并到Orchard CMS中的单个功能中?

时间:2013-12-05 14:34:06

标签: orchardcms

假设我有一个包含四个功能的模块:

  • My.Module.FeatureA.PartA
  • My.Module.FeatureA.PartB
  • My.Module.FeatureA.PartC
  • My.Module.FeatureB

我想重构我的模块,以便它只有两个功能,将前三个功能移动到一个名为My.Module.FeatureA的新功能中。

要做到这一点,我会:

  • 更新模块清单文件
  • 更改每个班级的OrhcardFeature属性
  • 将所有迁移文件合并为一次迁移

我可以看到这样做的一个问题 - 因为我们现在只有一个迁移,其具有与之前的“旧”三次迁移不同的类名。当然Orchard会尝试运行新的迁移(因为它以前不会运行),这会在尝试执行诸如创建最初创建旧迁移之一的表之类的操作时导致错误。

在Orchard中合并功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以以多次调用它们不会失败的方式实现新迁移。或者,如果这工作太多,您可以修改Orchard_Framework_DataMigrationRecord表,并使用最新版本的迁移为新迁移插入记录。这样Orchard就不会运行新的迁移。

答案 1 :(得分:1)

实际上,您确实希望运行新的迁移。记录类的自动映射依赖于包含功能名称的表的命名约定。如果合并功能,则表名称将更改。这意味着您需要:

  1. 为已移动的要素重新创建表格,以便新表格具有正确的名称并可以正确映射。

  2. 将现有数据从旧表移动到新表。这必须在纯SQL中完成,因为您必须解决这些约定,因为它们不能同时处于活动状态。请查看升级模块,了解相关示例。

  3. 可选择删除旧表。