2012-10-24 2 views
14

मैंने एक मॉड्यूल स्थापित किया है और Orchard.sdf में माइग्रेशन और टेबल बनाने के बाद मैं सभी टेबल और रोलबैक को माइग्रेशन के सभी परिवर्तनों को साफ़ करना चाहता हूं।मैं ऑर्चर्ड डेटाबेस से मॉड्यूल के डेटा को कैसे हटा सकता हूं?

मैंने टेबल छोड़े लेकिन मुझे लगता है कि कुछ मेटाडेटा को हटाया जाना चाहिए।

हम मॉड्यूल डेटा को पूरी तरह से कैसे साफ़ कर सकते हैं? धन्यवाद।

उत्तर

18

एक पूर्ण अनइंस्टॉल में डेटाबेस टेबल और पंक्तियों को हटाने में शामिल है जो आपके मॉड्यूल के नाम, इसकी विशेषताओं के नाम और इसके नामस्थान से जुड़े हैं। यहां एक प्रक्रिया है जो हमारे लिए काम करती है।

1: भागो orchard.exe> पैकेज की स्थापना रद्द करें Orchard.Module.MyModuleName

2: फिर, खुला एसक्यूएल सर्वर प्रबंधन स्टूडियो और निम्नलिखित डेटाबेस तालिका (रों) है कि अपने मॉड्यूल के साथ जुड़े रहे हैं छोड़ देते हैं।

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: अब जब आपने आईडी दर्ज की है, तो ऊपर दिए गए चरण 3 में मिली पंक्तियों को हटाएं।

6: चरण 4 में एकत्रित आईडी का उपयोग करके, निम्न तालिकाओं से पंक्तियां हटाएं।

SELECT * FROM Settings_ContentTypePartDefinitionRecord 
    WHERE ContentTypeDefinitionRecord_Id IN() 

SELECT * FROM Orchard_Framework_ContentItemRecord 
    WHERE ContentType_id IN() 

यही मेरे लिए काम करता है।

+1

वर्तमान संस्करण 1.6.1 पर काम करता है। +1 और धन्यवाद! –

+1

मुझे लगता है, आपको 'Orchard_Framework_ContentItemVersionRecord' से मान भी हटा देना चाहिए जहां ज्ञात सामग्री प्रकार के लिए' ContentItemRecord_id' = 'Orchard_Framework_ContentItemRecord.id' – teran

4

अगर वहाँ ऐसा करने के लिए एक उचित तरीका है, लेकिन Orchard_Framework_DataMigrationRecord अप सफाई के लिए पर्याप्त होना चाहिए मैं नहीं जानता:, मौजूदा सुविधा संस्करण खोजने के लिए अगर वहाँ पहले से ही एक प्रवेश आप नहीं हो सकता है datamigration चेकों इस तालिका सुविधा को फिर से सक्षम करने में सक्षम। इसके अलावा Settings_ShellFeatureRecord, Settings_ShellFeatureStateRecord जाँच, Settings_ContentPartDefinitionRecord और Settings_ContentTypeDefinitionRecord

अंत में, अन्य तालिकाओं में कई संदर्भ हो सकते हैं लेकिन मुझे लगता है कि कुछ भी खतरनाक नहीं है।

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;