2012-09-09 15 views
15

मैं ईएफ 5 का उपयोग करके 4 डेवलपर्स की एक टीम पर काम करता हूं, जो हर कोई अपने स्थानीय डेटाबेस पर काम करता है। अब तक हम स्वचालित माइग्रेशन का उपयोग कर रहे हैं लेकिन हम उस बिंदु के करीब हैं जहां हमें उत्पादन में रिलीज करने की आवश्यकता है ताकि हमने स्वचालित माइग्रेशन अक्षम कर दिए और स्पष्ट कोड-आधारित माइग्रेशन जोड़ना शुरू कर दिया हो।अपडेट-डाटाबेस स्वत: माइग्रेशन अक्षम करने के लिए स्वचालित माइग्रेशन करने का प्रयास करता है

यहाँ समस्या है: मैं Update-Database आदेश भाग गया के बाद एक डेवलपर एक नया स्पष्ट प्रवास बनाया है और मैं निम्नलिखित त्रुटि मिलती है:

Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions]. 
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions. 
Applying automatic migration: 201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration. 
Automatic migration was not applied because it would result in data loss. 

क्यों मैं इस त्रुटि भले ही मैं विकलांग स्वचालित माइग्रेशन है मिलता है ? मैं स्पष्ट माइग्रेशन को हटाकर इस त्रुटि को ठीक कर सकता हूं और फिर इसे फिर से मचान कर सकता हूं (Add-Migration चला रहा है)। फिर Update-Database ठीक चलता है और 'स्वचालित माइग्रेशन ...' के बारे में कुछ भी नहीं बताता है, इसके अलावा, जब मैं एड-माइग्रेशन चलाता हूं तो माइग्रेशन में कोड मेरे टीममेट द्वारा बनाए गए एक जैसा होता है। मुझे नहीं लगता कि यह AutomaticMigrationsEnabled = false; के बाद से स्वचालित माइग्रेशन करने का प्रयास क्यों करेगा।

मुझे यहां क्या याद आ रही है?

उत्तर

20

मुझे अपने प्रश्न का उत्तर देने से नफरत है लेकिन मुझे इस समस्या का सामना करना पड़ा। मेरी टीम के एक डेवलपर ने अपनी स्थानीय मशीन पर स्वचालित माइग्रेशन को फिर से सक्षम किया और फिर एक स्पष्ट माइग्रेशन बनाया, जिसने इसे चलाने के तुरंत बाद इस व्यवहार को पुन: उत्पन्न किया।

इकाई की रूपरेखा हमेशा इससे पहले कि यह एक स्पष्ट प्रवास Source संपत्ति अपने .resx फाइल में परिभाषित, भले हीAutomaticMigrationsEnabled = false है कि चलाता है एक स्वचालित माइग्रेशन चलेंगे। एक स्पष्ट माइग्रेशन में केवल Source संपत्ति सेट होगा यदि यह स्वचालित माइग्रेशन चलाने के बाद बनाया गया हो।

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

1

AutomaticMigrationEnabled = false अपने एप्लिकेशन को डेटाबेस को अपडेट करने से रोकता है।

लेकिन जब से आप अपने रन-अपडेट डेटाबेस को अपडेट करते हैं, तो अपडेट-डाटाबेस डेटाबेस की वर्तमान स्थिति की जांच करता है और उसके बाद डेटाबेस में पहले से मौजूद सभी माइग्रेशन चरणों को चलाता है जिसमें मॉडल (डीबीकॉन्टेक्स्ट) में परिवर्तन शामिल नहीं है जिसमें कोड नहीं है अभी तक माइग्रेशन माइग्रेशन।

मेरा अनुमान है कि मॉडल में कोई बदलाव है जो डेटा हानि का कारण बनता है।

डेटा हानि होने पर भी परिवर्तन लागू करने के लिए आप -force पैरामीटर का उपयोग कर सकते हैं।

0

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

हमने अद्यतन-डेटाबेस (यदि एक टीम के सदस्य ने नया माइग्रेशन जोड़ा है) कर रहे हैं, तो सब कुछ जांचना और नवीनतम होना शुरू कर दिया है, फिर एड-माइग्रेशन, अपडेट-डेटाबेस, चेक-इन कर रहे हैं।

3
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

जोड़े AutomaticMigrationDataLossAllowed = true; ताकि आप मानते हैं कि आप एफई निकालें एसक्यूएल वस्तुओं है कि डेटा हानि में परिणाम को जोड़ने के लिए अनुमति देना चाहते हैं।

+9

यह प्रश्न ईएफ के बारे में है जब भी वे स्पष्ट रूप से अक्षम होते हैं, तब भी एक स्वचालित माइग्रेशन लागू करते हैं। मैं कभी भी स्वचालित माइग्रेशन चलाने के लिए नहीं चाहता हूं और मैं विशेष रूप से नहीं चाहता कि ईएफ स्वचालित रूप से मेरा डेटा खो दे। –

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