Sql重命名Orchard自定义内容类型

时间:2015-01-30 04:49:12

标签: orchardcms orchardcms-1.8 orchard-modules

我打算重命名我的一个自定义内容类型,以便我可以为我正在处理的新Orchard模块释放它的名称。我希望在建议by this SO answer的迁移类中使用Schema.ExecuteSql,但我想确保我知道我需要做的所有更新。

到目前为止,我知道我需要更新下表中的字段:

  • Orchard_Framework_ContentTypeRecord
  • Settings_ContentTypeDefinitionRecord
  • Settings_ContentPartDefinitionRecord

此外,这是我需要运行的更新SQL的一般计划:

DECLARE @From VARCHAR(50) = 'OriginalName'
DECLARE @To VARCHAR(50) = 'NewName'

BEGIN TRANSACTION

BEGIN TRY

    UPDATE [Current_Orchard_Framework_ContentTypeRecord]
    SET [Name] = @To
    WHERE [Name] = @From

    UPDATE [Current_Settings_ContentTypeDefinitionRecord]
    SET [Name] = @To, [DisplayName] = @To
    WHERE [Name] = @From

    UPDATE [dbo].[Current_Settings_ContentPartDefinitionRecord]
    SET [Name] = @To + 'Part'
    WHERE [Name] = @From + 'Part'

    --COMMIT TRANSACTION
    ROLLBACK TRANSACTION /*Rollback while testing*/
END TRY

BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

我还缺少其他需要重命名以完全重命名我的内容类型的内容吗?

1 个答案:

答案 0 :(得分:0)

这可能不是您问题的确切答案,但是 - 尽管它有退休字符 - 它可能有助于您找到解决方案。

我正在一个有

的Orchard网站上工作
  • 很多页面
  • 网站上其他网页的很多html链接
  • 导航中的大量自定义链接项(链接到目标页面内的某些锚点等)。

在我们计划对网站进行删除之前不久,我们决定将搜索引擎优化的最突出页面的网址从http://www.example.org/orchard/products/category-name/product-name更改为http://www.example.org/orchard/shop/category-name/product-name-keyword-anotherkeyword(得热爱搜索引擎优化......)

手动执行此操作需要很长时间。更改内容项本身中的URL很容易(但在约20个项目上执行此操作仍需要一些时间),但更改所有120多个内容项中的所有<a href以及所有自定义链接5种导航(5种语言)根本不可能。

所以唯一可行的方法似乎是数据库操作。

我使用MS SQL Server Management Studio将Orchard数据库中的所有表导出到单个.sql文件中。然后我使用Notepad++搜索包含部分字符串/products/category/product-name的所有文件,并记下表名和字段名称(通常为TextData

在这种情况下,结果如下表所示:

  • Common_BodyPartRecord.Table
  • Orchard_Framework_ContentItemRecord
  • Orchard_Framework_ContentItemVersionRecord

对于search-replace SQl中的部分字符串,您使用replace函数,并且由于表字段的数据类型,果园存储数据,您必须转换字符串。生成的SQL查询如下所示:

update [Orchard_Live].[dbo].[Common_BodyPartRecord] 
    set Text = cast(replace(cast(Text as nvarchar(max)),     N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Text as nvarchar(max)) LIKE N'%/products/category/product-name%'

update [Orchard_Live].[dbo].[Orchard_Framework_ContentItemRecord] 
set Data = cast(replace(cast(Data as nvarchar(max)), N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Data as nvarchar(max)) LIKE N'%/products/category/product-name%'

update [Orchard_Live].[dbo].[Orchard_Framework_ContentItemVersionRecord] 
set Data = cast(replace(cast(Data as nvarchar(max)), N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Data as nvarchar(max)) LIKE N'%/products/category/product-name%'

我必须为每个必须更改的URL执行此操作。花了很长一段时间,但仍然手动改变一切到目前为止。也许这个&#34;工作流程&#34;也可以帮助你解决问题。