Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orchardcms 如何在Orchard CMS中将两个或多个功能合并为一个功能?_Orchardcms - Fatal编程技术网

Orchardcms 如何在Orchard CMS中将两个或多个功能合并为一个功能?

Orchardcms 如何在Orchard CMS中将两个或多个功能合并为一个功能?,orchardcms,Orchardcms,假设我有一个具有四个功能的模块: My.Module.FeatureA.PartA My.Module.FeatureA.PartB My.Module.FeatureA.PartC My.Module.FeatureB 我想重构我的模块,通过将前三个功能移动到名为my.module.FeatureA的新功能中,使其只具有两个功能 为此,我要: 更新模块清单文件 更改我的每个类的或hcardfeature属性 将任何迁移文件合并到单个迁移中 我可以看出这样做有一个问题,因为我们现在有一次

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

  • My.Module.FeatureA.PartA
  • My.Module.FeatureA.PartB
  • My.Module.FeatureA.PartC
  • My.Module.FeatureB
我想重构我的模块,通过将前三个功能移动到名为
my.module.FeatureA
的新功能中,使其只具有两个功能

为此,我要:

  • 更新模块清单文件
  • 更改我的每个类的
    或hcardfeature
    属性
  • 将任何迁移文件合并到单个迁移中
我可以看出这样做有一个问题,因为我们现在有一次迁移,与以前的三次“旧”迁移具有不同的类名。当然,Orchard将尝试运行新的迁移(因为它以前不会运行),这将在尝试执行操作(例如创建一个旧迁移最初创建的表)时导致错误


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

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

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

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

  • 将现有数据从旧表移动到新表。这必须在普通SQL中完成,因为您必须围绕约定工作,因为它们不能同时处于活动状态。请查看升级模块,以了解这方面的示例

  • (可选)删除旧表