我打算重命名我的一个自定义内容类型,以便我可以为我正在处理的新Orchard模块释放它的名称。我希望在建议by this SO answer的迁移类中使用Schema.ExecuteSql,但我想确保我知道我需要做的所有更新。
到目前为止,我知道我需要更新下表中的字段:
此外,这是我需要运行的更新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
我还缺少其他需要重命名以完全重命名我的内容类型的内容吗?
答案 0 :(得分:0)
这可能不是您问题的确切答案,但是 - 尽管它有退休字符 - 它可能有助于您找到解决方案。
我正在一个有
的Orchard网站上工作在我们计划对网站进行删除之前不久,我们决定将搜索引擎优化的最突出页面的网址从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
的所有文件,并记下表名和字段名称(通常为Text
或Data
)
在这种情况下,结果如下表所示:
对于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;也可以帮助你解决问题。