2012-04-10 12 views
11

प्राप्त करना मैंने अभी एंटीटी फ्रेमवर्क माइग्रेशन स्थापित किया है, एक वर्ग में एक संपत्ति जोड़ा है, और ईएफ माइग्रेशन को एक भंवर दिया है।आरंभिक इकाई फ्रेमवर्क माइग्रेशन स्क्रिप्ट

मेरा विकास डेटाबेस तुरंत अपडेट किया गया था। अब तक सब ठीक है.

अब, मैं इस प्रारंभिक उत्पादन डेटाबेस के लिए माइग्रेशन के उपयोग के लिए एक परिवर्तन स्क्रिप्ट बनाना चाहता हूं। ध्यान दें कि एक पूर्व-मौजूदा डेटाबेस था क्योंकि मैंने इसे किसी मौजूदा प्रोजेक्ट पर लागू किया था।

माइग्रेशन मैं हैं:

PM> Get-Migrations 
Retrieving migrations that have been applied to the target database. 
201204102238194_AutomaticMigration 
201203310233324_InitialCreate 
PM> 

मैंने सोचा कि मैं का उपयोग कर एक डेल्टा स्क्रिप्ट मिल सकता है निम्नलिखित:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration -script 

हालांकि, मुझे त्रुटि देता है कि:

'201204102238194_AutomaticMigration' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them.

बस यह देखने के लिए कि क्या होगा, मैंने दो पैरामीटर (पिछड़ा माइग्रेशन) उलट दिया और मुझे स्क्रिप्ट मिली -force ध्वज (नए कॉलम गिराए गए) को जोड़ने के बाद एलडी की उम्मीद है।

इस प्रथम माइग्रेशन के लिए मुझे स्क्रिप्ट कैसे मिल सकती है?

+0

आपने प्रारंभिक माइग्रेशन कैसे प्राप्त किया? आपके स्वचालित माइग्रेशन में पूरे डेटाबेस के लिए स्क्रिप्ट बनाना चाहिए जो आप नहीं चाहते हैं - मौजूदा डेटाबेस परिणामों पर इस तरह की स्क्रिप्ट को कई त्रुटियों में निष्पादित करना चाहिए। क्या आप इसके बजाय [इस दृष्टिकोण] (http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-डेटाबेस) आज़मा सकते हैं? –

+0

@ Ladislav: मुझे पूरे डेटाबेस के लिए वास्तव में एक स्क्रिप्ट की आवश्यकता नहीं है क्योंकि मेरा पूरा (प्रारंभिक) डेटाबेस पहले ही उत्पादन में है। मैं यह नहीं समझ सकता कि पहले से ही पहले अपडेट में पहले से ही माइग्रेशन का उपयोग करने से पहले, पहले से ही उत्पादन में पहले डेटाबेस से कैसे जाना है। मुझे यकीन है कि माइग्रेशन में कहीं भी मेरी प्रारंभिक डीबी स्कीमा है क्योंकि स्रोत-माइग्रेशन और लक्ष्य माइग्रेशन पैरामीटर को * -force * के साथ रिवर्स करना मेरे नए कॉलम को डीआरओपी करने के लिए एक स्क्रिप्ट बनाता है। मैं इसे प्रारंभिक डेटाबेस से पहले नए पुनरावृत्ति में जाने के लिए नहीं मिल सकता (उन कुछ कॉलम जोड़ें)। –

उत्तर

14

मौजूदा डेटाबेस के साथ ईएफ माइग्रेशन का उपयोग शुरू करने का सही तरीका एक खाली माइग्रेशन जोड़ने के साथ शुरू करना है जिसमें वर्तमान डेटाबेस का मेटाडेटा शामिल है।

मुझे लगता है कि आपको प्रारंभिक डेटाबेस स्कीमा के साथ संगत मॉडल पर वापस रोल करना होगा।

add-migration InitialSchema -IgnoreChanges 

कि तुम एक प्रारंभिक प्रवास, कि कुछ भी नहीं करता है, लेकिन वर्तमान मॉडल के मेटाडाटा को शामिल करना चाहिए: फिर निम्न आदेश चला। यदि आप डेटाबेस में पहले से मौजूद सभी तालिकाओं को कवर करने के लिए अपने कोड मॉडल का विस्तार कर चुके हैं तो आप -IgnoreChanges के साथ बाद में माइग्रेशन जोड़ सकते हैं।

एक बार जब आपके पास प्रारंभिक माइग्रेशन चरण हो, तो स्क्रिप्टिंग काम करेगी।

आम तौर पर मैं स्वचालित माइग्रेशन का उपयोग करने की अनुशंसा नहीं करता जबतक कि आप केवल स्वचालित माइग्रेशन का उपयोग करने का इरादा नहीं रखते। यदि आप डेटाबेस में परिवर्तनों पर कुछ प्रकार का नियंत्रण चाहते हैं (उन्हें स्क्रिप्टिंग समेत) तो कोड-आधारित माइग्रेशन रास्ता है।

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

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