Как удалить данные модуля из базы данных Orchard? - программирование
Подтвердить что ты не робот

Как удалить данные модуля из базы данных Orchard?

Я установил модуль, и после миграции и создания таблиц в Orchard.sdf я хочу очистить все таблицы и отменить все изменения, которые произошла миграция.

Я сбросил таблицы, но я думаю, некоторые метаданные должны быть удалены.

как мы можем полностью очистить данные модулей? спасибо.

4b9b3361

Ответ 1

Полное удаление включает удаление таблиц и строк базы данных, связанных с вашим именем модуля, именами его функций и его пространствами имен. Вот процесс, который сработал для нас.

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: Из приведенных выше результатов поиска обратите внимание на значения идентификаторов строк в этих таблицах.

Orchard_Framework_ContentTypeRecord.Id
Settings_ContentTypeDefinitionRecord.Id 

5: Теперь, когда вы записали Id, удалите строки, найденные вами на шаге 3 выше.

6: Используя идентификаторы, собранные на шаге 4, удалите строки из следующих таблиц.

SELECT * FROM Settings_ContentTypePartDefinitionRecord 
    WHERE ContentTypeDefinitionRecord_Id IN()

SELECT * FROM Orchard_Framework_ContentItemRecord 
    WHERE ContentType_id IN ()

Что сработало для меня.

Ответ 2

Я не знаю, есть ли способ сделать это, но очистки Orchard_Framework_DataMigrationRecord должно быть достаточно: datamigration проверяет эту таблицу, чтобы найти текущую версию функции, если есть уже запись, которую вы можете не сможет повторно включить эту функцию. Также проверьте Настройки_ShellFeatureRecord, Настройки_ShellFeatureStateRecord, Настройки_ContentPartDefinitionRecord и Настройки_ContentTypeDefinitionRecord.

Наконец, в других таблицах может быть много ссылок, но я не думаю, что ничего опасного.

Ответ 3

Вот фрагмент SQL Query, который делает это проще, если вы используете префиксы таблиц с арендаторами.

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;