我已经安装了一个模块,在Orchard.sdf
中迁移和创建表之后,我想清除所有表并回滚迁移所做的所有更改。
我放弃了表格,但我想应该删除一些元数据。
我们如何完全清除模块数据? 感谢。
答案 0 :(得分:18)
完全卸载涉及删除与模块名称,功能名称及其名称空间关联的数据库表和行。这是一个对我们有用的过程。
1:运行orchard.exe>包卸载Orchard.Module.MyModuleName
2:然后,打开SQL Server Management Studio并删除与您的模块关联的以下数据库表。
MyModuleName_MyFeatureNameRecord
3:对下表列进行通配符搜索。请务必搜索MyModuleName,MyNamespaceName,MyFeatureName等。您最终会删除所有这些行,但尚未删除。
SELECT * FROM Orchard_Framework_ContentTypeRecord WHERE Name LIKE '%%'
SELECT * FROM Settings_ContentTypeDefinitionRecord WHERE Name LIKE '%%'
SELECT * FROM Settings_ContentPartDefinitionRecord WHERE Name LIKE '%%'
SELECT * FROM Settings_ShellFeatureRecord WHERE Name LIKE '%%'
SELECT * FROM Settings_ShellFeatureStateRecord WHERE Name LIKE '%%'
SELECT * FROM Orchard_Framework_DataMigrationRecord WHERE DataMigrationClass LIKE '%%'
4:从上面的搜索结果中,记下这些表中行的Id值。
Orchard_Framework_ContentTypeRecord.Id
Settings_ContentTypeDefinitionRecord.Id
5:现在您已经记录了Id,删除了您在上面的步骤3中找到的行。
6:使用步骤4中收集的ID,删除下表中的行。
SELECT * FROM Settings_ContentTypePartDefinitionRecord
WHERE ContentTypeDefinitionRecord_Id IN()
SELECT * FROM Orchard_Framework_ContentItemRecord
WHERE ContentType_id IN ()
这对我有用。
答案 1 :(得分:5)
我不知道是否有正确的方法,但清理 Orchard_Framework_DataMigrationRecord 应该足够了:datamigration检查此表以查找当前功能版本,如果已有条目您可能无法重新启用该功能。另外,请检查 Settings_ShellFeatureRecord , Settings_ShellFeatureStateRecord , Settings_ContentPartDefinitionRecord 和 Settings_ContentTypeDefinitionRecord 。
最后,在其他表中可能有很多引用,但我认为没什么危险。
答案 2 :(得分:0)
这是一个SQL查询代码段,如果您将表前缀与租户一起使用,可以更轻松。
USE DatabaseName
DECLARE @moduleName varchar(255);
DECLARE @tableName varchar(255);
DECLARE @tablePrefix varchar(255);
SET @moduleName = '%Orchard.YourModule%';
SET @tablePrefix = 'YourTablePrefix';
SET @tableName = @tablePrefix + '_Orchard_Framework_ContentTypeRecord';
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE Name LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;
SET @tableName = @tablePrefix + '_Settings_ContentTypeDefinitionRecord';
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE Name LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;
SET @tableName = @tablePrefix + '_Settings_ContentPartDefinitionRecord';
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE Name LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;
SET @tableName = @tablePrefix + '_Settings_ShellFeatureRecord';
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE Name LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;
SET @tableName = @tablePrefix + '_Settings_ShellFeatureStateRecord';
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE Name LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;
SET @tableName = @tablePrefix + '_Orchard_Framework_DataMigrationRecord';
SELECT @sql = ' SELECT * ' +
' FROM dbo.' + quotename(@tableName) +
' WHERE DataMigrationClass LIKE @moduleName'
EXEC sp_executesql @sql, N'@moduleName varchar(255)', @moduleName;