Как удалить данные модуля из базы данных Orchard?
Я установил модуль, и после миграции и создания таблиц в Orchard.sdf
я хочу очистить все таблицы и отменить все изменения, которые произошла миграция.
Я сбросил таблицы, но я думаю, некоторые метаданные должны быть удалены.
как мы можем полностью очистить данные модулей?
спасибо.
Ответы
Ответ 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;