2012-03-15 13 views
6

मैं एक समस्या यह है कि बालों के झड़ने के कारण है ...मैं कैसे रोकूँ एफई (कोड पहले) स्कीमा परिवर्तन के लिए जाँच हो रही है

मैं कोड पहले (EF) का उपयोग कर एक परियोजना का निर्माण किया है; सब ठीक है और यह एक आकर्षण की तरह काम करता है, हालांकि, मुझे स्टार्ट-अप पर टैंट्रम फेंकने वाले एप्लिकेशन के बिना डेटाबेस परिवर्तनों (.sql स्क्रिप्ट्स के माध्यम से) के लिए अनुमति देने का एक उपयुक्त तरीका नहीं मिल रहा है क्योंकि स्कीमा बदल गया है।

मैंने इस समस्या को पढ़ और पढ़ा है, मैंने एडमेटाटा तालिका को हटा दिया है, इसलिए यह डेटाबेस के हैश की तुलना नहीं कर सकता है, लेकिन फिर पढ़ा गया है कि ईएफ के साथ एक बग था अगर इसे हटा दिया गया है, तो यह अभी भी स्कीमा सोचता है बदल गया है (क्योंकि यह गायब तालिका को नहीं पहचानता है, इसलिए यह एक खाली स्ट्रिंग की तुलना करता है!)।

इसके अलावा, मैंने Global.asax फ़ाइल में डेटाबेस.SetInitializer (null) का उपयोग करने का प्रयास किया है, लेकिन इसका मतलब है कि मैं बाद में डेटा मॉडल तक नहीं पहुंच सकता।

लिए एफई/कोड पहले ... कुछ भी नहीं करना:

हर कोई डेटाबेस छोड़ने के विकल्प का उपयोग करता है, तो स्कीमा परिवर्तन आदि

यह मैं के लिए क्या देख रहा हूँ है के बारे में बात! स्वीट एफए! Nowt!

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

इसका मतलब है कि मैं किसी भी समय .sql स्क्रिप्ट के साथ हमारे किसी भी ग्राहक को आसानी से अपडेट कर सकता हूं और ईएफ जा रहा स्तन के बारे में चिंता नहीं कर सकता! :(

किसी भी विचार लोग ??

+0

कृपया, बताएं कि क्या होता है यदि आप डेटाबेस प्रारंभकर्ता को शून्य पर सेट करते हैं। –

उत्तर

5

null को प्रारंभकर्ता करने के साथ ही यह भी अपने संदर्भ वर्ग से जोड़ें:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    model.Conventions.Remove<IncludeMetadataConvention>(); 
} 

यह की तुलना हैश को बंद कर देगा

7
अधिक के साथ

। हालिया इकाई फ्रेमवर्क संस्करणों, आपको अब ऐसा करने की ज़रूरत नहीं है जो लाडस्लाव मिन्का कहते हैं। ईएफ 4.3 के बाद से, आपको बस वेबकॉन्टेक्स्ट के लिए प्रारंभकर्ता को सेट करने की आवश्यकता है। उदाहरण के लिए:

Database.SetInitializer<FabrikamFiberWebContext>(null); 
संबंधित मुद्दे