2012-10-24 4 views
14

Ich habe ein Modul installiert und nach der Migration und Erstellen von Tabellen in Orchard.sdf Ich möchte alle Tabellen löschen und alle Änderungen zurücksetzen, die die Migration vorgenommen hat.Wie entferne ich Moduldaten aus der Orchard-Datenbank?

Ich habe die Tabellen gelöscht, aber ich denke, einige Metadaten sollten entfernt werden.

Wie können wir die Daten eines Moduls vollständig löschen? danke.

Antwort

18

Eine vollständige Deinstallation umfasst das Löschen der Datenbanktabellen und Zeilen, die dem Namen Ihres Moduls, den Namen seiner Funktionen und seiner Namespaces zugeordnet sind. Hier ist ein Prozess, der für uns funktioniert hat.

1: Führen Sie orchard.exe> Paket deinstallieren Orchard.Module.MyModuleName

2: Dann öffnen Sie SQL Server Management Studio und legen Sie die folgenden Datenbanktabelle (n), die mit dem Modul verbunden sind.

MyModuleName_MyFeatureNameRecord 

3: Führen Sie eine Platzhaltersuche in den folgenden Tabellenspalten durch. Achten Sie darauf, nach MyModuleName, MyNamespaceName, MyFeatureName usw. zu suchen. Sie werden alle diese Zeilen eventuell löschen, aber noch nicht.

4: Notieren Sie sich aus den obigen Suchergebnissen die ID-Werte der Zeilen in diesen Tabellen.

5: Nachdem Sie die ID aufgezeichnet haben, löschen Sie die Zeilen, die Sie in Schritt 3 oben gefunden haben.

6: Löschen Sie anhand der in Schritt 4 erfassten IDs die Zeilen aus den folgenden Tabellen.

SELECT * FROM Settings_ContentTypePartDefinitionRecord 
    WHERE ContentTypeDefinitionRecord_Id IN() 

SELECT * FROM Orchard_Framework_ContentItemRecord 
    WHERE ContentType_id IN() 

Das hat bei mir funktioniert.

+1

Funktioniert mit der aktuellen Version 1.6.1. +1 und danke! –

+1

scheint mir, Sie sollten auch Werte aus 'Orchard_Framework_ContentItemVersionRecord' löschen, wobei' ContentItemRecord_id' = 'Orchard_Framework_ContentItemRecord.id' für bekannte ContentTypes – teran

4

Ich weiß nicht, ob es eine richtige Art und Weise, das zu tun, aber bis der Reinigung Orchard_Framework_DataMigrationRecord sollte genug sein: datamigration prüft diese Tabelle die aktuelle Feature-Version zu finden, wenn bereits ein Eintrag ist, dass Sie nicht sein können kann das Feature erneut aktivieren. Prüfen Sie auch Settings_ShellFeatureRecord, Settings_ShellFeatureStateRecord, Settings_ContentPartDefinitionRecord und Settings_ContentTypeDefinitionRecord.

Schließlich kann es viele Referenzen in anderen Tabellen geben, aber ich denke nichts Gefährliches.

0

Hier ist ein SQL Query Snippet, das dies erleichtert, wenn Sie Tabellenpräfixe mit Mandanten verwenden.

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; 
Verwandte Themen