2012-05-15 6 views
12

मेरे पास उत्पादन में एक प्रणाली है जो इकाई फ्रेमवर्क 4.1 कोड प्रथम के साथ बनाई गई थी। अब, मैंने माइग्रेशन को लागू करने की आवश्यकता है, लेकिन मुझे कई उपयोग मामलों को कवर करने की आवश्यकता है:एंटिटी फ्रेमवर्क 4.1 का उपयोग करके बनाए गए उत्पादन में मौजूदा डीबी पर माइग्रेशन का उपयोग कैसे करें?

  1. एक नए डेवलपर को बीज डेटा के साथ स्क्रैच से बनाए गए डेटाबेस की आवश्यकता होती है। (Seed() विधि कुछ अद्वितीय सूचकांक भी लागू करती है।)
  2. उत्पादन वातावरण को केवल लागू अपरिवर्तनीय परिवर्तनों की आवश्यकता होती है। (लेकिन ध्यान रखें कि यह डीबी ईएफ 4.1 में बनाया गया था, जिसमें माइग्रेशन नहीं हैं।)

मैं इन दोनों मामलों को कवर करने के लिए माइग्रेशन और प्रारंभकर्ता (या प्रारंभकर्ता) कैसे बना सकता हूं?

उत्तर

27

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

  1. परियोजना माइग्रेशन के साथ एफई 4.3 (या बाद) का उपयोग करने और उत्पादन वर्तमान में कैसा दिखता स्नैपशॉट के लिए आरंभिक माइग्रेशन बनाने अपग्रेड

    Update-Package EntityFramework 
    Enable-Migrations 
    Add-Migration InitialCreate 
    
  2. माइग्रेशन कोड मिलान के साथ अपने डेटाबेस initializers बदलें।

    बीज डेटा के लिए, Migrations\Configuration.cs फ़ाइल के Seed() विधि में जोड़ें। ध्यान दें कि प्रारंभकर्ताओं में Seed() विधि के विपरीत, यह विधि हर बार Update-Database कहलाती है। इसे पंक्तियों को अपडेट करने की बजाय पंक्तियों को अपडेट करने की आवश्यकता हो सकती है (बीज डेटा रीसेट करें)। AddOrUpdate() विधि इसके साथ सहायता कर सकती है।

    चूंकि आपकी अनूठी अनिश्चितता अब माइग्रेशन के साथ बनाई जा सकती है, इसलिए आपको इन्हें प्रारंभिक क्रिएट माइग्रेशन की Up() विधि में जोड़ना चाहिए। आप विधि का उपयोग करके या CreateIndex() विधि को कॉल करके CreateTable() कॉल से उन्हें चेन कर सकते हैं।

    प्रारंभिकरण के दौरान माइग्रेशन चलाने के लिए अब आप MigrateDatabaseToLatestVersion प्रारंभकर्ता का उपयोग कर सकते हैं।

  3. अपने उत्पादन वातावरण को बूटस्ट्रैप करने के लिए एक स्क्रिप्ट प्राप्त करें।

    Update-Database -Script 
    

    स्क्रिप्ट उत्पन्न हो जाता है कि से, आप के बाद से टेबल aready मौजूद लगभग सब कुछ नष्ट करने के लिए चाहता हूँ। जिन हिस्सों की आपको आवश्यकता होगी वे CREATE TABLE [__MigrationHistory] और INSERT INTO [__MigrationHistory] कथन हैं।

  4. वैकल्पिक रूप से, EdmMetadata तालिका को छोड़ दें क्योंकि इसकी अब आवश्यकता नहीं है।

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

+0

यह बहुत अच्छा है! बहुत बहुत धन्यवाद! Idempotency के लिए –

+0

+1। –

+0

क्षमा करें प्रक्रिया इतनी शामिल है। हमने 4.3 में इंटिलाइजर्स से माइग्रेशन में जाना आसान बना दिया - शुरुआतकर्ता मूल रूप से आपके लिए यह हिस्सा करते हैं। दुर्भाग्यवश, 4.2 और उससे नीचे के लोगों के उन्नयन के लिए हम इतना कुछ नहीं कर सकते थे। खैर, अन्य तो उनके StackOverflow सवालों का जवाब दें। ;) – bricelam

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