2012-10-24 7 views
14

私はモジュールをインストールしました。そして、マイグレーションの後にOrchard.sdfにテーブルを作成すると、すべてのテーブルをクリアして、マイグレーションが行ったすべての変更をロールバックします。Orchardデータベースからモジュールのデータを削除するにはどうすればよいですか?

テーブルを削除しましたが、一部のメタデータを削除する必要があります。

モジュールのデータを完全に消去する方法はありますか?ありがとう。

答えて

18

完全にアンインストールするには、モジュールの名前、その機能の名前、および名前空間に関連付けられているデータベースのテーブルと行を削除する必要があります。ここで私たちのために働いたプロセスです。

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:上記の検索結果から、これらの表の行のID値を書き留めます。

Orchard_Framework_ContentTypeRecord.Id 
Settings_ContentTypeDefinitionRecord.Id 

5:これで、上記の手順3で見つかった行を削除しました。

6:手順4で収集したIDを使用して、次の表から行を削除します。

SELECT * FROM Settings_ContentTypePartDefinitionRecord 
    WHERE ContentTypeDefinitionRecord_Id IN() 

SELECT * FROM Orchard_Framework_ContentItemRecord 
    WHERE ContentType_id IN() 

これが私の仕事です。

+1

現在のバージョン1.6.1で動作します。 +1してありがとう! –

+1

私にとっては、既知のContentTypesの場合は 'ContentItemRecord_id' =' Orchard_Framework_ContentItemRecord.id'となっている 'Orchard_Framework_ContentItemVersionRecord'から値を削除する必要があります – teran

4

私はそれを行うための適切な方法があるかどうか知らないが、Orchard_Framework_DataMigrationRecordをきれいにするだけでは十分でなければなりません:あなたはないかもしれないエントリがすでに存在する場合、現在の機能のバージョンを見つけるために、このテーブルをデータ移行をチェックその機能を再び有効にすることができます。またSettings_ShellFeatureRecordをチェックSettings_ShellFeatureStateRecordはSettings_ContentTypeDefinitionRecordをSettings_ContentPartDefinitionRecord。

最後に、他のテーブルには多数の参照があるかもしれませんが、私は危険ではないと思います。

0

テナントでテーブル接頭辞を使用すると、これを簡単に行う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; 
関連する問題