14

我已经安装了一个模块,在迁移和创建表之后,Orchard.sdf我想清除所有表并回滚迁移所做的所有更改。

我删除了表格,但我想应该删除一些元数据。

我们如何才能完全清除模块数据?谢谢。

4

3 回答 3

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 ()

这对我有用。

于 2013-04-18T19:04:22.040 回答
5

我不知道是否有正确的方法可以做到这一点,但是清理Orchard_Framework_DataMigrationRecord应该就足够了:datamigration 检查此表以查找当前功能版本,如果已经有一个条目,您可能无法重新启用特征。还要检查Settings_ShellFeatureRecordSettings_ShellFeatureStateRecordSettings_ContentPartDefinitionRecordSettings_ContentTypeDefinitionRecord

最后,其他表中可能有很多引用,但我认为没有什么危险的。

于 2012-10-24T21:57:09.813 回答
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;
于 2016-03-22T15:01:46.340 回答