私はモジュールをインストールしました。そして、マイグレーションの後にOrchard.sdf
にテーブルを作成すると、すべてのテーブルをクリアして、マイグレーションが行ったすべての変更をロールバックします。Orchardデータベースからモジュールのデータを削除するにはどうすればよいですか?
テーブルを削除しましたが、一部のメタデータを削除する必要があります。
モジュールのデータを完全に消去する方法はありますか?ありがとう。
私はモジュールをインストールしました。そして、マイグレーションの後にOrchard.sdf
にテーブルを作成すると、すべてのテーブルをクリアして、マイグレーションが行ったすべての変更をロールバックします。Orchardデータベースからモジュールのデータを削除するにはどうすればよいですか?
テーブルを削除しましたが、一部のメタデータを削除する必要があります。
モジュールのデータを完全に消去する方法はありますか?ありがとう。
完全にアンインストールするには、モジュールの名前、その機能の名前、および名前空間に関連付けられているデータベースのテーブルと行を削除する必要があります。ここで私たちのために働いたプロセスです。
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()
これが私の仕事です。
私はそれを行うための適切な方法があるかどうか知らないが、Orchard_Framework_DataMigrationRecordをきれいにするだけでは十分でなければなりません:あなたはないかもしれないエントリがすでに存在する場合、現在の機能のバージョンを見つけるために、このテーブルをデータ移行をチェックその機能を再び有効にすることができます。またSettings_ShellFeatureRecord、をチェックSettings_ShellFeatureStateRecord、はSettings_ContentTypeDefinitionRecordとをSettings_ContentPartDefinitionRecord。
最後に、他のテーブルには多数の参照があるかもしれませんが、私は危険ではないと思います。
テナントでテーブル接頭辞を使用すると、これを簡単に行う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;
現在のバージョン1.6.1で動作します。 +1してありがとう! –
私にとっては、既知のContentTypesの場合は 'ContentItemRecord_id' =' Orchard_Framework_ContentItemRecord.id'となっている 'Orchard_Framework_ContentItemVersionRecord'から値を削除する必要があります – teran