2012-09-26 17 views
7

मेरी वस्तु एक नाम फ़ील्ड है कहो, और मैं इसे प्रथम नाम और अंतिम नाम खेतों में विभाजित करना चाहते हैं। या हो सकता है कि इसमें एक पता स्ट्रिंग हो और मैं लेट और एलएनजी फ़ील्ड जोड़ रहा हूं जिसके लिए जियोकोडिंग की आवश्यकता है। आदि आदिमुझे एक इकाई फ्रेमवर्क माइग्रेशन कैसे लिखना चाहिए जो डेटा को बदलता है (अधिमानतः डीबीकॉन्टेक्स्ट का उपयोग करके)?

मुझे अप() और डाउन() विधियों में मेरे डीबीकॉन्टेक्स्ट तक पहुंच होने की उम्मीद है, लेकिन मैं जो भी ढूंढ सकता हूं (अंतर्निहित कार्यों के अलावा) .ql() कॉल है। यह कॉलम जोड़ने और हटाने के लिए पर्याप्त है, लेकिन मौजूदा डेटा को नए प्रारूपों में बदलने के लिए नहीं।

यह एक अप() मंगलाचरण अंदर मेरे DbContext संदर्भित करने के लिए सुरक्षित है? या क्या माइग्रेशन लागू करने के लिए एक और अनुशंसित पैटर्न है जिसके लिए तुच्छ एसक्यूएल से अधिक की आवश्यकता है?

उत्तर

0

नहीं आप DbContext का उपयोग Up विधि के अंदर नहीं कर सकते क्योंकि यह पहले से ही नए मॉडल को संदर्भित करता है लेकिन आपका डेटाबेस अभी भी पुराने मॉडल को लक्षित करता है।

संपादित करें:

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

+2

मेरे आवश्यक परिवर्तनों (बंटवारे varchars एक मौलिक oversimplified उदाहरण था) एसक्यूएल के रूप में नहीं किया जा सकता। इस प्रकार का माइग्रेशन ऑपरेशन एक बतख-प्रकार ORM में ActiveRecord की तरह बहुत स्वाभाविक है, लेकिन यह समझ में आता है कि यह एक ऐसा क्षेत्र है जहां ईएफ दृष्टिकोण में परेशानी होगी। – Seth

0
बल्कि दो अलग-अलग क्षेत्रों में नाम विभाजित करने के लिए, अपने माइग्रेशन पर पुनर्विचार कोशिश कर रहा से

। कभी-कभी यह सबसे अच्छा मंच हो सकता है। मैं आपके परिवर्तन को करने के दो तरीकों के बारे में सोच सकता हूं।

प्रवासन पथ # 1: नए फील्ड्स, तो पुराने

  1. प्रथम नाम और अंतिम नाम के लिए नए क्षेत्र के लिए माइग्रेशन बनाने, हटाने, और विधि अप() में, आप अभी भी नाम फ़ील्ड है, इसे विभाजित , पहले और अंतिम क्षेत्रों में डालें।
  2. वर्ष नाम फ़ील्ड को दूर करने के अन्य माइग्रेशन बनाएँ।

प्रवासन पथ # 2: repurpose और नाम बदलें

  1. एक प्रवास अंतिम नाम क्षेत्र जोड़ने, और FirstName के नाम का नाम बदलने बनाएं, अंतिम नाम डेटा ले जाते हैं, का नाम बदलकर प्रथम/नाम फ़ील्ड को संशोधित केवल पहला नाम पकड़ो।

दोनों रास्तों फायदे और नुकसान हैं। और आपके परिवर्तन की जटिलता के बावजूद, आप लक्ष्य को पूरा करने के लिए इसे तार्किक चरणों में तोड़ने में सक्षम होना चाहिए।