2010-11-16 18 views
9

में कोई बदलाव नहीं है, मुझे कुछ मूलभूत याद आना चाहिए।FluentMigrator माइग्रेशन सफल होता है, लेकिन डीबी

मैं एक विरासत परियोजना पर काम कर रहा हूँ, और मुझे लगता है मैं कुछ रोचक डेटाबेस परिवर्तन और डेटा माइग्रेशन मुझे लगता है कि बहुत द्वारा आसान बनाया जाएगा आ रहा है मिश्रण कारण में FluentMigrator लाने के लिए कोशिश कर रहा हूँ इस उपकरण का उपयोग कर।

प्रारंभिक माइग्रेशन के लिए, मैं बस डेटाबेस को वर्तमान उत्पादन संस्करण में लाने के लिए चाहता हूं। आरंभिक माइग्रेशन को सरल बनाने के लिए, मैंने अपने SQL Server 2008 डेटाबेस को स्क्रिप्ट किया है, और माइग्रेशन SQL आदेशों की श्रृंखला के रूप में स्क्रिप्ट किए गए आदेशों को निष्पादित करता है।

इसे बाहर का परीक्षण करने के लिए, मैं एक पूरी तरह से खाली डाटाबेस बनाने, और इस का उपयोग कर कमांड लाइन से चलाने का प्रयास:

> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll" 
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName; 
Integrated Security=SSPI" -version=20100901000000 

संस्करण निर्दिष्ट प्रथम प्रवास के वर्ग के प्रवासन विशेषता पर टाइमस्टैम्प है।

कमांड लाइन में सब कुछ ठीक से चलाने के लिए प्रकट होता है - पूरे स्क्रिप्ट के द्वारा ज़ूम, और इसके साथ समाप्त होता है:

-- CreateProductionDbCircaSep2010: migrated 

हालांकि, जब मैं डेटाबेस पर एक नज़र डालें, यह अभी भी खाली है । बिल्कुल कुछ भी नहीं है। मेरे ऊपर विधि इस प्रकार है:

public override void Up() 
{ 
    var cmds = LoadEmbeddedResources 
     .GetEmbeddedResource("scripted_db_2010-09-01.sql") 
     .AsString() 
     .ParseCommands(); 

    foreach (var c in cmds) { 
     Execute.Sql(c); 
    } 

    CreateReferenceData(); 
} 

(FYI करें, मैं स्क्रिप्ट के बजाय पार्स करने कर रहा हूँ इसे चलाने के रूप में है, क्योंकि मैं खोज यह मर गया था इससे पहले कि Migrator.Net का उपयोग करके शुरू कर दिया है, और इस पहले से ही था सेट अप करें।)

क्या कोई मुझे हाथ दे सकता है? यह लगभग प्रतीत होता है तरह लेन-देन करने से नहीं है, या कुछ कमांड लाइन विकल्प प्रवास कर एक सूखी रन चालू है, लेकिन मैं इसे नहीं दिख रहा है करने के लिए ...

संपादित करें: अतिरिक्त जिन चीजों की मैंने कोशिश की है

यह पुष्टि करने के लिए कि कनेक्शन स्ट्रिंग डेटाबेस का उपयोग कर रहा था, मैं उम्मीद करता हूं कि, मैंने डेटाबेस का नाम बदल दिया और बाद में एक लॉगिन त्रुटि मिली, जैसा कि अपेक्षित था।

आगे परीक्षण के लिए, मैं स्क्रिप्ट की लंबाई में कटौती, और

public override void Up() 
{ 
    Execute.Script(@"..\Resources\test.sql"); 
} 
आदेश-दर-आदेश के बजाय

का उपयोग कर इसे क्रियान्वित करने की कोशिश की, लेकिन मैं एक ही परिणाम मिलता है।

C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug 
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2 
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000 
0 
Using Database SqlServer2008 and Connection String Data Source=.\SQLEXPRESS2008; 
Initial Catalog=myNewDbName;Integrated Security=SSPI 
-- VersionMigration: migrating =============================================== 

-- CreateTable VersionInfo 
-- VersionMigration: migrated 
-- CreateProductionDbCircaSep2010: migrating ================================= 

-- ExecuteSqlScript C:\My\Project\Path\FluentMigrator.Net\..\Resources\test.sql 
-- CreateProductionDbCircaSep2010: migrated 

अभी तक कोई टेबल डेटाबेस में - वहाँ भी उम्मीद VersionInfo तालिका नहीं है: यहाँ है कि परीक्षण पर उत्पादन होता है (ध्यान दें, मैं pathes और इस तरह संपादित)।

उत्तर

19

संस्करण 0.8 और 1.0 दोनों के साथ कुछ जांच और परीक्षण के बाद, ऐसा लगता है कि यह माइग्रेशन रनर के लेनदेन प्रबंधन से संबंधित FluentMigrator.Net में एक बग है - यदि आप किसी विशिष्ट संस्करण संख्या के साथ माइग्रेशन चलाते हैं, तो लेनदेन की प्रतिबद्धता कभी नहीं मिलती बुलाया; यदि आप संस्करण संख्या निर्दिष्ट नहीं करते हैं, तो यह ठीक है।

संपादित करें:

मैं के बाद से परियोजना जो स्वीकार कर लिया गया करने के लिए एक पैच प्रस्तुत की है। यह अब कोई समस्या नहीं है।

+1

मैं समय के साथ परियोजना के लिए एक पैच कोशिश करने और इकट्ठा करने जा रहा हूं। पैच सबमिट करने के लिए –

+9

+1 –

14

यह वास्तव में बेवकूफ लगता है, लेकिन मैं इस पर कई घंटे बर्बाद किया है, इसलिए इसे यहाँ अंतर्गत आता है:

अपना माइग्रेशन कक्षाएं सार्वजनिक दृश्यता का उपयोग सुनिश्चित करें।

इसके बिना, आपके माइग्रेशन पूरी तरह अनदेखा कर दिए जाएंगे।

+1

धन्यवाद! यह पूरी तरह से मुझे बचाया। –

संबंधित मुद्दे