C# 如何卸下模块';来自果园数据库的数据?

C# 如何卸下模块';来自果园数据库的数据?,c#,asp.net,orchardcms,C#,Asp.net,Orchardcms,我已经安装了一个模块,在Orchard.sdf中迁移和创建表之后,我想清除所有表并回滚迁移所做的所有更改 我删除了表,但我想应该删除一些元数据 我们如何才能完全清除模块数据? 谢谢。我不知道是否有合适的方法,但是清理Orchard\u Framework\u DataMigrationRecord就足够了:datamigration检查此表以查找当前功能版本,如果已经有条目,您可能无法重新启用该功能。同时检查设置\u外壳特性记录,设置\u外壳特性状态记录,设置\u内容部分定义记录和设置\u内容类

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

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

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

我不知道是否有合适的方法,但是清理Orchard\u Framework\u DataMigrationRecord就足够了:datamigration检查此表以查找当前功能版本,如果已经有条目,您可能无法重新启用该功能。同时检查设置\u外壳特性记录设置\u外壳特性状态记录设置\u内容部分定义记录设置\u内容类型定义记录


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

完全卸载包括删除与模块名称、功能名称和名称空间相关的数据库表和行。这是一个对我们有用的过程

1:运行>包卸载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 ()

这就是我的工作原理。

这里有一个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;

在我看来,对于已知的内容类型,您还应该从
Orchard\u Framework\u ContentItemVersionRecord
中删除
ContentItemRecord\u id
=
Orchard\u Framework\u ContentItemRecord.id
中的值