7

यह एक लंबा सवाल है, लेकिन अगर मैं इस पर कुछ अच्छी सलाह ले सकता हूं तो मैं बहुत आभारी हूं। संक्षेप में, मैं एमएस एसक्यूएल डेटाबेस स्कीमा के संस्करण अपग्रेड के लिए एक अच्छा दृष्टिकोण ढूंढ रहा हूं जो हटाए गए टेबल से डेटा को नए टेबल में ले जाने की भी मांग करता है।ईएफ मॉडल प्रथम डेटाबेस स्कीमा अपग्रेड के साथ डेटा हानि से कैसे बचें?

मुझे लगता है कि इस सवाल के लिए स्टैक ओवरफ़्लो सबसे उपयुक्त स्थान है (dba.stackexchange.com नहीं) क्योंकि इसके मूल में, यह एनटीई डेवलपर्स के लिए एंटिटी फ्रेमवर्क का उपयोग कर एक मुद्दा है, और इसके डेटाबेस भागों में ज्यादातर शामिल हैं स्वत: जेनरेट एसक्यूएल स्क्रिप्ट्स।


पृष्ठभूमि

एक .NET अनुप्रयोग और SQL डेटाबेस Azure में चल रहा है (कार्यकर्ता भूमिकाओं में आवेदन और Azure एसक्यूएल में डेटाबेस)। अब तक, संस्करण उन्नयन ठीक काम किया है, क्योंकि सभी डेटाबेस स्कीमा परिवर्तन सरल रहे हैं (जैसे एक नया कॉलम जोड़ना)। हालांकि, अब से मुझे उन्नयन के दौरान एक टेबल से दूसरे स्थान पर डेटा ले जाने की भी आवश्यकता है। (मैं एक नया डेटाबेस बनाकर अस्थायी रूप से इसे ठीक करने में सक्षम हूं, पुराने डेटाबेस से डेटा के साथ एक स्क्रिप्ट उत्पन्न करता हूं और स्क्रिप्ट को मैन्युअल रूप से नई स्कीमा में फिट करने के लिए संपादित करता हूं, लेकिन मुझे आशा है कि एक बेहतर दृष्टिकोण होगा)।

मैं इकाई फ्रेमवर्क का उपयोग करता हूं और मैं मॉडल फर्स्ट का उपयोग करता हूं। संस्थाओं और संघों को विजुअल स्टूडियो डेटा मॉडल डिजाइनर में परिभाषित किया गया है, और यह दृष्टिकोण मेरे आवेदन के लिए बहुत उपयुक्त है।

मैं Azure SQL डेटाबेस को अपग्रेड करने के लिए एक dacpac का उपयोग करता हूं, और इस दृष्टिकोण ने अब तक अच्छी तरह से काम किया है (लेकिन अब मुझे डेटा हानि मिलेगी, इसलिए अब मुझे डेटा को नई टेबल पर ले जाने का एक तरीका मिलना चाहिए)।

मुझे आशा है कि मैं इकाई ढांचे का उपयोग करना जारी रखूंगा और डिजाइनर में इकाइयों/संघों को परिभाषित कर सकता हूं, लेकिन यदि आवश्यक हो तो डैपैक अपग्रेड से दूसरी तकनीक में स्विच करना ठीक है।

अपग्रेड दृष्टिकोण अब

  1. जब तक मैं डिजाइनर में नए संस्थाओं (टेबल्स), संघों (संबंधों) और गुण (स्तंभ) जोड़ें।
  2. मैं राइट-क्लिक करें, "मॉडल से डेटाबेस जेनरेट करें ..." चुनें और इसका परिणाम एक .sql स्क्रिप्ट में होता है जो पुराने डेटाबेस ऑब्जेक्ट्स को छोड़ देता है और नई डेटाबेस ऑब्जेक्ट बनाता है।
  3. मैं एक खाली डेटाबेस बनाता हूं और टेबल/कुंजी आदि बनाने के लिए स्क्रिप्ट चलाता हूं
  4. SQL सर्वर प्रबंधन स्टूडियो में, मैं डेटाबेस पर राइट-क्लिक करता हूं और "कार्य -> ​​डेटा-स्तरीय एप्लिकेशन निकालें ..." चुनें। जब विज़ार्ड पूरा हो जाता है तो मुझे डैपैक की ज़रूरत होती है (वास्तव में मैं अब डेटाबेस को हटा सकता हूं, क्योंकि मैंने इसे केवल डीएसीपीएसी फ़ाइल प्राप्त करने में सक्षम होने के लिए बनाया है, क्योंकि मुझे नहीं लगता कि मैं इसे विजुअल स्टूडियो डेटा मॉडल डिजाइनर में उत्पन्न कर सकता हूं) ।
  5. मैं Azure SQL डेटाबेस पर राइट-क्लिक करें और "कार्य -> ​​डेटा-स्तरीय एप्लिकेशन अपग्रेड करें ..." चुनें और विज़ार्ड का पालन करें। अब तक मुझे डेटा हानि नहीं हुई है, इसलिए इसने ठीक काम किया है!

वर्तमान स्थिति

इस सरल उदाहरण से इस मुद्दे को वर्णन करने के लिए है, लेकिन मैं अब ऐसा लगता है से अक्सर लगभग समान स्थितियों में मिल जाएगा। नीचे दिए गए आंकड़े में स्कीमा के पुराने और नए संस्करण को देखें। मान लें कि डेटाबेस में पहले से ही डेटा है। मुझे ImageFile में डेटा की आवश्यकता है ImageFileOriginal या ImageFileProcessed में IsOriginal Boolean/bit value के आधार पर। "डेटा-स्तरीय एप्लिकेशन अपग्रेड करें" का उपयोग करके मुझे डेटा हानि से सतर्क कर दिया जाएगा। इससे निपटने के लिए आप किस दृष्टिकोण की सिफारिश करेंगे?जैसा कि मैंने पहले कहा था, यदि आवश्यक हो तो dacpac अपग्रेड से दूसरी तकनीक में स्विच करना ठीक है।

Old schema New schema

मैं दृश्य स्टूडियो डाटाबेस परियोजनाओं, सुविज्ञ Migrator, लाल गेट और इकाई डिजाइनर डाटाबेस पीढ़ी पावर पैक (यह Visual Studio 2012 का समर्थन नहीं करता) के बारे में पढ़ा है, लेकिन मैं एक नहीं मिला इसके लिए अच्छा तरीका है। मैं मानता हूं कि मैंने पूरे तकनीक में खुदाई नहीं कर ली है, लेकिन मैंने निश्चित रूप से एक अच्छा दृष्टिकोण खोजने के लिए कुछ समय बिताया है।

उत्तर

1

डेटाबेस स्कीमा और भी डेटा, SSDT उपयोग कर रहा है (टेबल/स्तंभ हटाना/बनाने) विस्थापित करने के लिए सबसे अच्छा तरीका है - SQL सर्वर डेटा उपकरण, विजुअल स्टूडियो 2010 और दृश्य स्टूडियो 2012

यहाँ कुछ कर रहे हैं के लिए उपलब्ध बहुत उपयोगी लिंक्स:

http://msdn.microsoft.com/data/tools http://blogs.msdn.com/b/ssdt http://msdn.microsoft.com/en-us/data/hh297027

0

Configuration वर्ग के रूप में नीचे निर्माता सेट में:

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
    AutomaticMigrationDataLossAllowed = false; 
} 

सेट true को AutomaticMigrationEnabled संपत्ति मतलब है कि हम स्वत: कोड प्रथम प्रवास और एक अन्य संपत्ति AutomaticMigrationDataLossAllowedfalse पर सेट किया जाता का उपयोग कर रहे हैं, जिसका मतलब है कि प्रवास के दौरान कोई मौजूदा डेटा डेटाबेस की तालिका के कि माइग्रेशन से खो दिया है।

संपूर्ण Configuration कक्षा निम्नानुसार है।

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