2016-07-05 5 views
5

मैं इकाई फ्रेमवर्क 6.0 पर हूं। यह एक विकास मुद्दा है, उत्पादन नहीं।ईएफ कोड प्रथम डेटाबेस प्रारंभकर्ता और माइग्रेशन भ्रम

मुझे लगता है कि मेरे पास एक विरोधाभासी रणनीति है। वर्तमान में मेरे पास DropCreateDatabaseIfModelChanges डेटाबेस प्रारंभकर्ता सेट है और कॉन्फ़िगरेशन.cs में बीज विधि के साथ माइग्रेशन सक्षम है। माइग्रेशन जोड़ने और अद्यतन-डेटाबेस को चलाने पर, यह एक भाग्यशाली डुबकी जैसा लगता है जब डेटाबेस गिरा दिया जाता है और फिर से बनाया जाता है और जब बीज विधि चलती है। तथ्य यह है कि, जब यह होता है तो यह कुल लॉटरी है, और मुझे काम करने के लिए सभी प्रकार की चाल खींचनी है। क्या कोई मुझे बता सकता है कि यह डेटाबेस प्रारंभकर्ता और माइग्रेशन सक्षम दोनों के लिए विरोधाभासी है। धन्यवाद

उत्तर

3

यह एक उचित संयोजन नहीं है। माइग्रेशन के साथ उपयोग के लिए MigrateDatabaseToLatestVersion प्रारंभकर्ता है।

प्रारंभिक विकास के दौरान, आप DropCreateDatabaseIfModelChanges प्रारंभकर्ता (या CreateDatabaseIfNotExists) का उपयोग करना चाह सकते हैं। प्रारंभकर्ताओं के लिए एक विशेष बीज() विधि है जो डेटाबेस बनने पर ही चलती है।

एक बार जब आप किसी बिंदु पर पहुंच जाते हैं जहां डेटाबेस में क्या होता है तो शोध करने के लिए दर्द होता है आप माइग्रेशन पर स्विच कर सकते हैं। अपना प्रारंभकर्ता बदलें और माइग्रेशन सक्षम करें। initial baseline migration (add-migration Initial -IgnoreChanges) जोड़ना सुनिश्चित करें ताकि आपको उस बिंदु के बाद ही परिवर्तन मिले। अब आप माइग्रेशन सीडिंग जोड़ सकते हैं जो प्रत्येक बार जब आप अद्यतन-डेटाबेस के विपरीत डेटाबेस-अद्यतन के रूप में चलाता है जो केवल डेटाबेस चलाता है तो चलाता है।

यदि आपको डेटाबेस को फिर से बनाने की आवश्यकता है, तो आप idempotent script उत्पन्न कर सकते हैं जो डेटाबेस बनाएगा और सभी माइग्रेशन लागू करेगा।

+0

धन्यवाद स्टीव, आखिर में एक कॉमन भावना स्पष्टीकरण कि यह सामान कैसे काम करता है। मेरे पास पहले से ही माइग्रेशन सक्षम हैं और 20 अजीब माइग्रेशन इस काम को काम करने की कोशिश कर रहे हैं। इसलिए मैं प्रारंभकर्ता को MigrateDatabaseToLatestVersion में बदलता हूं और बीज डेटा को जोड़ने के लिए माइग्रेशन बीज का उपयोग करता हूं। – ShaunK

+0

इसके अलावा, मैंने पहले ही प्रारंभिक माइग्रेशन बनाया है। क्या मुझे इसे फिर से करने की ज़रूरत है- इग्नोर चेंज, और यदि ऐसा है तो क्यों। धन्यवाद – ShaunK

+0

इस बात पर निर्भर करता है कि आपके पास टेस्ट, प्रोड, या अन्य देव मशीन जैसे अन्य डेटाबेस हैं जो अलग-अलग राज्यों में हैं। यदि ऐसा है तो आपको उन्हें एक ही पृष्ठ पर प्राप्त करने की आवश्यकता है। यदि यह केवल एक डेटाबेस है और आपके सभी परिवर्तन लागू किए गए हैं, तो आप सभी माइग्रेशन को हटा सकते हैं, __ माइग्रेशन हिस्ट्री में सभी रिकॉर्ड्स हटा सकते हैं और एक नया प्रारंभिक माइग्रेशन-इग्नोर चेंज कर सकते हैं। अब आपके सभी परिवर्तनों को आगे बढ़ने के लिए ट्रैक किया जाएगा। –

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