2012-10-24 2 views
14

ho installato un modulo e dopo la migrazione e la creazione di tabelle in Orchard.sdf voglio cancellare tutte le tabelle e ripristinare tutte le modifiche apportate alla migrazione.Come posso rimuovere i dati del modulo dal database di Orchard?

Ho lasciato cadere i tavoli ma credo che alcuni metadati debbano essere rimossi.

come è possibile cancellare completamente i dati dei moduli? grazie.

risposta

18

Una disinstallazione completa comporta l'eliminazione delle tabelle e delle righe del database associate al nome del modulo, ai nomi delle sue funzioni e ai relativi spazi dei nomi. Ecco un processo che ha funzionato per noi.

1: Eseguire orchard.exe> pacchetto di disinstallazione Orchard.Module.MyModuleName

2: Allora, aprire SQL Server Management Studio e rilasciare la seguente tabella di database (s) che sono associati con il modulo.

MyModuleName_MyFeatureNameRecord 

3: eseguire una ricerca con caratteri jolly delle seguenti colonne della tabella. Assicurati di cercare MyModuleName, MyNamespaceName, MyFeatureName, ecc. Eliminerai tutte queste righe, ma non ancora.

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: Dai risultati della ricerca sopra, prendere nota dei valori Id delle righe in queste tabelle.

Orchard_Framework_ContentTypeRecord.Id 
Settings_ContentTypeDefinitionRecord.Id 

5: Ora che hai registrato Id, elimina le righe che hai trovato nel passaggio 3 sopra.

6: Utilizzando gli ID raccolti nel passaggio 4, eliminare le righe dalle seguenti tabelle.

SELECT * FROM Settings_ContentTypePartDefinitionRecord 
    WHERE ContentTypeDefinitionRecord_Id IN() 

SELECT * FROM Orchard_Framework_ContentItemRecord 
    WHERE ContentType_id IN() 

Questo è quello che ha funzionato per me.

+1

Funziona sulla versione corrente 1.6.1. +1 e grazie! –

+1

mi sembra, dovresti anche cancellare i valori da 'Orchard_Framework_ContentItemVersionRecord' dove' ContentItemRecord_id' = 'Orchard_Framework_ContentItemRecord.id' per ContentTypes conosciuti – teran

4

Non so se c'è un modo corretto di farlo, ma la pulizia Orchard_Framework_DataMigrationRecord dovrebbe essere sufficiente: controlli datamigration questa tabella per trovare la versione funzione corrente, se esiste già una voce potrebbe non essere in grado di riattivare la funzione. Verificare anche Settings_ShellFeatureRecord, Settings_ShellFeatureStateRecord, Settings_ContentPartDefinitionRecord e Settings_ContentTypeDefinitionRecord.

Infine, ci possono essere molti riferimenti in altri tavoli ma non penso nulla di pericoloso.

0

Ecco uno snippet di SQL Query che semplifica la procedura se si utilizzano prefissi tabella con tenant.

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;