2012-06-11 10 views
6

मैं पहले ईएफ कोड में नया हूं। मेरे पास उत्पादन में एक मौजूदा डेटाबेस है और मैंने पहले ईएफ 4.3.1 कोड का उपयोग किया और सब कुछ काम किया। अब मैं बस अपना डेटाबेस स्कीमा अद्यतन और अपवादईएफ कोड का उपयोग करते हुए डेटाबेस स्कीमा बदलते समय सबसे आसान काम क्या है

System.InvalidOperationException: The model backing the 'MyDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). 

मैं DropCreateDatabaseIfModelChanges उपयोग नहीं कर सकते, क्योंकि यह उत्पादन में है मिला है, स्कीमा परिवर्तन से निपटने के लिए लेने के लिए सबसे आसान तरीका क्या है?

धन्यवाद।

+1

आप की कोशिश की है क्या अपवाद संदेश का सुझाव दिया? डेटाबेस अद्यतन करने के लिए कोड प्रथम माइग्रेशन का उपयोग करके _Consider (http://go.microsoft.com/fwlink/?LinkId=238269)._ – jrummell

+0

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

+1

@YoupTube यह "रिवर्स इंजीनियर" और कोड-प्रथम के साथ मौजूदा डेटाबेस के बारे में सोचने से अधिक आम है। डेटाबेस पहले मॉडल डिजाइनर का उपयोग करने से यह अधिक लचीला है। – jrummell

उत्तर

4

आप अपने नए मॉडल से मेल खाने के लिए स्वचालित रूप से अपने डेटाबेस को अपडेट करने के लिए एंटिटी फ्रेमवर्क माइग्रेशन का उपयोग कर देख सकते हैं।

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

+0

यही वही मुद्दा है जो मैंने इस मुद्दे के लिए किया था और यह पूरी तरह से काम करता था। –

6

के बाद से एफई-सीएफ माइग्रेशन एक काफी नई अवधारणा मैं एक सदियों पुरानी सिद्ध प्रक्रिया लेने और एफई की तरह, हमारे नए उपकरणों के साथ काम करने के लिए इसे संशोधित सुझाव है कि कर रहे हैं।

  1. उपयोग DropCreateDatabaseIfModelChanges स्थानीय विकास के लिए: यहाँ हम क्या कर रहे हैं। यह आपको अपने स्थानीय देव प्रति को आपके साथ मॉडल (कोड में) सिंक में रखने की अनुमति देगा। प्रत्येक बार जब आप बिल्ड/रन करते हैं तो आपको एक अपडेटेड स्थानीय डेटाबेस मिलता है। आप परीक्षण डेटा लोड करने के लिए एक प्रारंभकर्ता का भी उपयोग कर सकते हैं, आदि Database.SetInitializer<DBContextNameHere>(new DBContextInitializerNameHere());

  2. स्थानीय देव की तुलना करने के लिए रेडगेट के SQLCompare टूल का उपयोग करें और स्वचालित रूप से तैनाती के लिए एक परिवर्तन स्क्रिप्ट उत्पन्न करें। (नोट: आप भी उपकरण से ऑटो तैनात कर सकते हैं)

http://www.red-gate.com/products/sql-development/sql-compare/index-b

प्रमुख लाभ आप अपने स्थानीय देव प्रक्रिया को बदलने के लिए नहीं है और आप के माध्यम से एक repeatable और वर्सन तैनाती मिल उत्पन्न लिपि स्रोत नियंत्रण में आप अपनी सभी SQL ऑब्जेक्ट्स और परिनियोजन स्क्रिप्ट (यहां तक ​​कि डेटा) को रखने के लिए इसे अपने SQL स्रोत नियंत्रण उपकरण के साथ भी जोड़ सकते हैं।

नहीं, मैं इन लोगों के लिए काम नहीं करता हूं, मैं सिर्फ उनके उपकरण से प्यार करता हूं और यह मुझे इस समस्या के साथ कैसे मदद करता है।

-1

मैं इस कोड पूर्ण मदद आशा है कि आप करने के लिए

EF- Code first migration

+0

जबकि लिंक प्रश्न का उत्तर दे सकता है, यह बेहतर होगा यदि आप यहां जवाब में थोड़ा अधिक विस्तार जोड़ सकते हैं। ऐसा करने से यह सुनिश्चित हो जाएगा कि लिंक निष्क्रिय होने पर भी आपका उत्तर मान्य रहता है। – Harry

3

मैं ने पाया है कि डेटाबेस पर निम्न स्क्रिप्ट

truncate table __MigrationHistory 

चल इस समस्या को दूर करता है जब आपके कोड/db से बाहर हो जाता है सिंक।

शायद मैं पुराने स्कूल में उपयोग कर रहा हूं, डेटाबेस डिजाइन के साथ & टिंकर का निर्माण कर सकता हूं, तदनुसार कोड संशोधित कर सकता हूं या खोज सकता हूं कि मुझे कोडिंग करते समय एक नया क्षेत्र चाहिए ... बस दोनों जगहों में जोड़ें।

मैं MVC पर नया (आईएसएच) होने के लिए स्वीकार करूंगा लेकिन कभी-कभी इस तरह की विशेषताएं अनुपयोगी होती हैं क्योंकि वे छुपाते हैं कि चीजें मौलिक स्तर पर कैसे काम करती हैं। जब आप समझते हैं कि सब कुछ कैसे फिट बैठता है, तो मदद करने के लिए जेनरेटर और टूल्स रखने के लिए सभी अच्छे हैं, लेकिन जब शुरू हो रहा है ... मुझे नहीं लगता कि यह अच्छा है।

मैं कई डेवलपर्स में आया हूं जो कोड जनरेटर, जादूगर इत्यादि के उपयोग के कारण सरल अवधारणाओं को समझ नहीं पाते हैं ..जब वास्तविक के लिए प्रोग्रामिंग की बात आती है, या विरासत प्रणाली को बनाए रखने की बात आती है तो वे थोड़ा खो जाते हैं ..

+0

मैंने एक 'गंदे' बचाया जिसने ईएफ को इस तालिका को जोड़ने के लिए प्रेरित किया। इसे हटाने से मेरी समस्या ठीक हो गई। धन्यवाद! –

0

जब ऐसा होता है, तो यह सामान्य रूप से माइग्रेशन को एक नए डेटाबेस पर इंगित करने के लिए चलाता है, एक बार यह डेटाबेस बनाया जाता है तो इसकी संरचना की तुलना करें आपके मौजूदा एक के साथ नया, यदि मैन्युअल रूप से परिवर्तन की आवश्यकता है (अन्यथा यह आपको त्रुटि का कारण बता सकता है - अनचाहे स्कीमा परिवर्तन या अनुक्रमणिका इत्यादि) तो अपने मूल डीबी और प्रतिलिपि पर अपनी __ माइग्रेशन इतिहास तालिका में प्रविष्टियों को हटा दें आपके नए डीबी से प्रविष्टियां ताकि __ माइग्रेशन हिस्ट्री सही हो जाए और कोड फर्स्ट अब सही ढंग से सिंक हो जाएगा।

0

मैं जोड़कर इस समस्या का समाधान हो

Database.SetInitializer<MyContext>(null); to Application_Start() inside Global.asax.cs 
संबंधित मुद्दे