2010-08-29 10 views
7

कोडफर्स्ट ईएफ 4 के साथ डेटाबेस रीफैक्टरिंग के लिए सर्वोत्तम प्रथाएं क्या हैं?ईएफ 4 कोड के साथ पहले रिफैक्टर कोड/डीबी स्कीमा - डेटा माइग्रेशन

मुझे यह जानने में दिलचस्पी है कि लोग कक्षाओं और डेटाबेस को कैसे बदलते हैं जब RecreateDatabaseIfModelChanges विकल्प संभव नहीं है। डेटा का माइग्रेशन होने की आवश्यकता होगी।

http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx?PageIndex=2#comments

किसी को भी कोड पहले के लिए एक अच्छी रणनीति है:

वर्तमान में माइक्रोसॉफ्ट ने सबसे पहले मॉडल के साथ ऐसा करने के लिए एक समाधान है?

+0

आप वास्तव में क्या देख रहे हैं? सीएफ के साथ आपके डीबी स्कीमा को रिफैक्टर करने के लिए आपके पास * नहीं है। – TheCloudlessSky

+3

यदि आप इसे दूर करते हैं और फिर से बनाते हैं, तो आपको इसे पुन: सक्रिय करने की आवश्यकता नहीं है, लेकिन अन्यथा, आपको माइग्रेशन स्क्रिप्ट लिखना और लागू करना होगा, है ना? अन्यथा यह कोड से मेल नहीं खाएगा। –

उत्तर

1

एफई टीम एक माइग्रेशन पर काम कर रहा है एफई कि इस समस्या का समाधान करना चाहिए के लिए शामिल हैं।

http://blogs.msdn.com/b/efdesign/archive/2010/10/22/code-first-database-evolution-aka-migrations.aspx

स्कॉट गु यूरोप के आसपास उनके हाल के दौरे पर कहा कि वे इस सुविधा को जल्द ही रिहा किया जाना चाहिए। मैं अपनी सांस पकड़ रहा हूँ।

रोमांचक अद्यतन:

यह अब एक CTP के रूप में जारी किया गया है: http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx

1

मैं डेटाबेस संदर्भ प्रारंभकर्ता पर काम कर रहा हूं जो मॉडल और डीबी स्कीमा सिंक से बाहर होने पर वेबमास्टर को सूचित करेगा और दिखाएगा कि क्या अलग है। यह उन डेवलपर्स के लिए उपयोगी हो सकता है जो कोड-प्रथम मॉडल और डेटाबेस स्कीमा दोनों पर पूर्ण नियंत्रण रखना पसंद करते हैं। इसे देखें:

https://github.com/rialib/efextensions

1

मेरी CodeFirst आवेदन में, स्थानीय बनाता है एक app.config झंडा अर्थ है कि उत्पादन में नहीं किया जा रहा है। जब मैं उत्पादन में नहीं हूं तो यह पूरी तरह से nukes और डेटाबेस को पुन: प्रयास करता है। चूंकि मेरे उत्पादन डेटाबेस उपयोगकर्ता को डेटाबेस छोड़ने की अनुमति नहीं है, भले ही मेरा web.config ट्रांसफ़ॉर्म किसी भी तरह से चूक गया हो (इस प्रकार ईएफ डेटाबेस को पुन: बनाने का प्रयास करता है) मेरा उत्पादन डेटाबेस हटाया नहीं जाएगा, और इसके बजाय एक अपवाद फेंक दिया जाएगा।

मेरे कार्यप्रवाह इस प्रकार है:

  1. चेक बाहर नवीनतम के साथ बदलता
  2. जल्दी धुआं/प्रतिगमन परीक्षण कोड के उत्पादन शाखा (यह पहले से ही उत्पादन शाखा में कोड जांच करने से पहले किया जाना चाहिए, लेकिन सिर्फ मामले) में
  3. मेरी उत्पादन डेटाबेस के नवीनतम बैकअप डाउनलोड करें और डेटाबेस अपने स्थानीय कोड बनाया (भले ही यह उत्पादन कोड है, क्योंकि यह स्थानीय यह recr के बीच अपने स्थानीय SQLEXPRESS सर्वर
  4. भागो Open DBDiff पर इसे स्थापित उत्पादन बैकअप के खिलाफ डेटाबेस खाता है)।
  5. उत्पन्न स्क्रिप्ट की समीक्षा करें और उत्पादन बैकअप के खिलाफ उन्हें चलाने का प्रयास करें
  6. कोई त्रुटि नहीं हुई है, डेटाबेस बैकअप के साथ उत्पन्न कोड को ओवरराइट करें और उत्पादन डेटा के खिलाफ परीक्षण करें ताकि यह सुनिश्चित किया जा सके कि सभी डेटा अभी भी बरकरार हैं;
  7. वास्तविक उत्पादन डेटाबेस पर स्क्रिप्ट चलाएं।

चरण # 2 स्वचालित डेटा मॉडल के आधार पर स्वचालित रूप से एक नया, साफ डेटाबेस बनाता है, इसलिए मुझे हमेशा पता है कि मेरे पास अद्यतित डेटाबेस है जिसमें विकास प्रयासों से कलाकृतियों नहीं हैं जो अभी तक उत्पादन तैयार नहीं हो सकते हैं।

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