2012-02-25 17 views
32

इसलिए मैंने कोड को पहले चलाने में कामयाब रहा है और यह बहुत अच्छा काम करता है।कनेक्शन स्ट्रिंग्स के साथ कोड पहला माइग्रेशन

चूंकि मैं अभी भी एप्लिकेशन विकसित कर रहा हूं क्योंकि डेटाबेस की संरचना को अंतिम रूप दिया नहीं गया है और इसलिए मुझे माइग्रेशन को कार्यान्वित करने की आवश्यकता है।

मैंने Official Blog Post का पालन किया और अद्यतन-डेटाबेस कमांड काम कर लिया।

हालांकि, यह केवल डेटाबेस के SQLExpress संस्करण को अद्यतन करता है। डेटाबेस का उत्पादन संस्करण Azure पर है और मैं रन टाइम पर कनेक्शन स्ट्रिंग निर्दिष्ट करता हूं ताकि अद्यतन-डेटाबेस कमांड उस पर काम न करे।

तो मेरा अंतिम सवाल यह है कि: मैं उत्पादन डेटाबेस में स्वचालित माइग्रेशन कैसे लागू करूं जिनकी कनेक्शन स्ट्रिंग रनटाइम पर निर्दिष्ट है?

+0

कोई ऐप.कॉन्फिग की जांच करने वाले और पीएम कंसोल का उपयोग न करने वालों के लिए, यह पोस्ट देखें http://stackoverflow.com/questions/15504465/entityframework-code-first-custom-connection-string-and-migrations/16133150# 16133150 –

उत्तर

49

पैकेज प्रबंधक कंसोल प्रकार पर:

Get-Help Update-Database

प्रासंगिक हिस्सा:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com 
monParameters>] 

तो तुम एक Update-Database -ConnectionStringName "MyConnectionString" कर सकते हैं और यह एक आकर्षण की तरह काम करना चाहिए।

तुम भी एक MigrateDatabaseToLatestVersion डेटाबेस प्रारंभकर्ता आप इसे सेट (Dabase.SetInitializer() के माध्यम से) यदि जब आप उचित कनेक्शन स्ट्रिंग के साथ उत्पादन पर अपने ऐप को तैनात, frist db उपयोग पर यह पूर्ण रूप से अपने नवीनतम संस्करण के लिए अपने डाटाबेस की ओर पलायन करना चाहिए,,।

मैं चेतावनी का सुझाव देता हूं, हमेशा बैकअप चीजें।

अद्यतन

@Alexy Strakh हाल की टिप्पणियों जवाब में डालने लायक एक और तर्क को जन्म दिया।

कोड प्रथम माइग्रेशन का उपयोग करके तैनाती प्रणाली को उचित रूप से कॉन्फ़िगर करना, 2 ConnectionString एस दिया गया।

  1. web.config में अपने कनेक्शन तार (prod और देव), डिफ़ॉल्ट पासवर्ड के साथ परिभाषित
  2. अपने आवेदन के विन्यास प्रणाली prod और देव कनेक्शन विन्यास के बारे में पता, वैकल्पिक रूप से इकाई परीक्षण का निर्माण सुनिश्चित करने के लिए है सही उठाया जाता है *
  3. रोजगार config file transformation और यह उत्पादन मूल्यों के साथ एक में अपने web.config को बदलने
  4. उत्पादन (this should be the most cutting edge way)
करने के लिए अपने पैकेज तैनात है

आपको अपने विकास बॉक्स से उत्पादन वातावरण से संपर्क नहीं करना चाहिए, लेकिन यदि आप वास्तव में ऐसा करने की ज़रूरत है, तो इसे एक अस्थायी समाधान बनाएं जिसे आप जितनी जल्दी हो सके वापस लौटाए जाने की आवश्यकता है।

एक और विकल्प वेब का उपयोग करना है। डीबग.कॉन्फिग और वेब। रिलीज.कॉन्फिग और मुख्य वेब.कॉन्फिग के लिए एक केंद्रीय टेम्पलेट है (जो आपके स्रोत नियंत्रण में केवल एक ही होगा)।

बस सुनिश्चित करें कि कभी भी उत्पादन या व्यक्तिगत विकास पासवर्ड (यदि कोई भी) में जांच न करें।

* आप यह जांचने के लिए DEBUG प्रतीक का उपयोग कर सकते हैं कि एप्लिकेशन कैसा चल रहा है।

+0

मेरे पास web.release.config पर निर्दिष्ट मेरे डिफ़ॉल्ट web.config और prod db कनेक्शन में निर्दिष्ट एक dev डेटाबेस है। मैं देव के बजाय प्रोड का उपयोग करना चाहता हूं, क्या मैं ऐसा कर सकता हूं? –

+0

हां, हर तरह से, लेकिन याद रखें कि यह इकाई/ढांचे/उत्पादन के लिए आपके कॉन्फ़िगरेशन तर्क से अवगत होने के लिए इकाई ढांचा (या कोई स्टोरेज तकनीक) ज़िम्मेदारी नहीं है। मुझे लगता है कि आपको कॉन्फ़िगरेशन फ़ाइल परिवर्तन की आवश्यकता है। https://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx – WDRust

+0

यह मानते हुए कि आप उस मार्ग पर जाना चाहते हैं। यदि आपके पास अतिरिक्त विवरण या आवश्यकताएं हैं तो आपको एक और प्रश्न बनाना चाहिए (मुझे पिंग करने के लिए स्वतंत्र महसूस करें) – WDRust

4

Why does Entity Framework's EF Migrations Add-Migration step require a database connection string?

एक समाधान है जो मैं कम श्रम लंबे समय में गहन विचार करना है। यदि आप एक ही नाम

अपने संदर्भ पर के साथ एक कनेक्शन स्ट्रिंग बनाने के रूप में: आधार ("DBNAME")

कनेक्शन स्ट्रिंग नाम और प्रारंभिक सूची DBNAME से मेल आपके द्वारा निर्दिष्ट और आप में प्रवेश करने की जरूरत नहीं है प्रत्येक बार कनेक्शन स्ट्रिंग नाम।

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