2013-03-30 5 views
49

मैं जानना चाहता हूं कि उत्पादन डेटाबेस के लिए 'अद्यतन-डेटाबेस' कमांड कैसे चलाएं।इकाई फ्रेमवर्क कोड पहले - उत्पादन डेटाबेस के लिए अद्यतन-डेटाबेस कैसे चलाएं

'अपडेट-डाटाबेस' डेटाबेस मेरी स्थानीय मशीन से ठीक काम करता है, लेकिन मैं इसे उत्पादन डेटा के लिए कैसे काम कर सकता हूं?

इसलिए, यदि मैं अपने आवेदन में बदलाव करता हूं और फिर दृश्य स्टूडियो के माध्यम से 'प्रकाशित' चलाता हूं तो यह चीजों के कोड पक्ष के लिए ठीक काम करता है, लेकिन मैं उत्पादन डेटा के लिए 'अपडेट-डेटाबेस' कमांड कैसे चला सकता हूं ।

आशा इस सवाल का समझ में आता है ...

धन्यवाद,

+1

[इकाई की रूपरेखा का उपयोग करना (कोड पहले) उत्पादन में प्रवास करते हैं] की संभावित डुप्लिकेट (http://stackoverflow.com/questions/10848746/using-entity-framework-code - पहले-माइग्रेशन-इन-प्रोडक्शन) –

उत्तर

16

क्या @ दाऊद पहले ही कहा पर जोड़ने के लिए ...

व्यक्तिगत रूप से, मैं 'जी' परिदृश्यों में automatic updates भरोसा नहीं करते, और मैं हमेशा पसंद करते हैं मैन्युअल डेटाबेस प्रशासन (यानी permissions के साथ कोई समस्या है जो डीबी बनाने या बदलने के लिए आवश्यक है - साझा होस्टिंग इत्यादि का उल्लेख नहीं करना) - लेकिन सिंक्रनाइज़ करने की बात आने पर माइग्रेशन जो मैंने देखा है, उससे काफी ठोस है (वास्तव में, एकमात्र तरीका उन्हें 'untie' करने के लिए सामान्य रूप से डीबी को हटाने और पूर्ण/ताजा अद्यतन बल) है।

यहां एक पोस्ट है जिसे मैंने कुछ समय पहले बनाया था, script और synchronize database/code पर और तैनाती परिदृश्यों की दिशा में तैयार (और जब समस्याएं उत्पन्न होती हैं)। यह आपके लिए लागू नहीं है (अभी तक) लेकिन कुछ ध्यान में रखना है।

MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

+0

इतना जटिल क्यों? आवेदन शुरू होने/पहली बार संदर्भ का उपयोग करते समय स्वचालित रूप से माइग्रेशन कोड को चलाने में क्या गलत है? सी # विधि को कॉल करने से एसक्यूएल स्क्रिप्ट बेहतर कैसे है? –

+1

@FlorianWinter आदर्श स्थितियों और अपेक्षाकृत सरल परिदृश्यों में सच है, और यदि आप जानते हैं कि आप क्या कर रहे हैं (उदा। डीबी प्रशासन और माइग्रेशन टेबल)। लेकिन जल्द ही आप कुछ मुद्दों पर आते हैं, सिंक इत्यादि से बाहर हो जाते हैं और आपके पास वहां लाइव डेटा है जो हर कीमत पर छुआ नहीं जाना चाहिए। मैं वास्तव में माइग्रेशन या मेरे लिए यह काम करने के लिए किसी भी प्रारंभकर्ता पर भरोसा नहीं करता हूं। और यह उन मुद्दों के असंख्य से आता है जो मैंने पिछले कुछ वर्षों में देखा है। तो जब डेटा रहते हैं, तो मुझे पूर्ण नियंत्रण में होना पसंद है। मैं ऐप को चलाने और खुद को माइग्रेट करने दे सकता हूं लेकिन केवल फिर से जांचने के बाद। और स्केलिंग इत्यादि – NSGaga

+0

प्वाइंट लिया गया, और मैं सहमत हूं। मैं एक चेतावनी जोड़ूंगा और आपके उत्तर को आपके उत्तर का एक लिंक जोड़ूंगा, लेकिन मैं इसे वहां छोड़ दूंगा, क्योंकि उन साधारण परिदृश्य मौजूद हैं। कम से कम अस्थायी रूप से ... –

26

Using Entity Framework (code first) migrations in production देखें तो आपके आवेदन स्वचालित रूप से डेटाबेस को अद्यतन करता है कि जब इकाई की रूपरेखा initializes।

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

http://msdn.microsoft.com/en-us/data/jj591621.aspx (ए एसक्यूएल स्क्रिप्ट खंड हो रही है देखें)

4

तुम सिर्फ स्वचालित रूप से अद्यतन नवीनतम संस्करण कब और कहाँ कभी अपने आवेदन रन (विकास और उत्पादन) के लिए डेटाबेस के लिए करना चाहते हैं?

यह एक अच्छा विचार नहीं हो सकता है, बहुत सरल परिदृश्यों को छोड़कर जहां आप जानते हैं कि आप स्वचालित माइग्रेशन पर भरोसा कर सकते हैं और डेटाबेस को मैन्युअल रूप से माइग्रेट करना संभव नहीं है। कृपया यह उत्तर देखें: https://stackoverflow.com/a/15718190/2279059। यदि आप इस चेतावनी की उपेक्षा करते हैं, तो पढ़ें।

जोड़े निम्नलिखित web.config रहे हैं:

<entityFramework> 
<contexts> 
    <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" /> 
    </context> 
</contexts> 

यह डरावना लग सकता है, लेकिन यह मूल रूप से निम्न कोड के रूप में ही कार्य करता है:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>()); 

आप web.config साथ विफल रहता है तो, तो आप इस कोड को Global.asax में डालने का भी प्रयास कर सकते हैं। मैं व्यक्तिगत रूप से कोड पर विन्यास पसंद करते हैं।

आप अपने कॉन्फ़िग फ़ाइल क्लीनर देखने के लिए चाहते हैं, आप भी एक नया वर्ग टेम्पलेट MigrateDatabaseToLatestVersion वर्ग से निकाले जाते हैं कर सकते हैं, ताकि आप अपने web.cofig फ़ाइल में प्रकार तर्क पारित करने के लिए गुप्त सिंटैक्स का उपयोग करने की जरूरत नहीं है:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {} 

यह डेटाबेस प्रारंभकर्ता सेट करने के लिए क्या करता है जो स्वचालित रूप से डेटाबेस को नवीनतम संस्करण में अद्यतन करता है।

(स्रोत और अधिक जानकारी के: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)

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