2012-02-13 15 views
30

हम EntityFramework के साथ डेटाबेस पहले दृष्टिकोण का उपयोग कर रहे हैं। हमारे पास कई ग्राहक हैं, और जब हम नए उत्पाद संस्करण को तैनात करते हैं, तो हम अब SQL Compare जैसे टूल के साथ "मैन्युअल रूप से" डीबी स्कीमा परिवर्तन लागू कर रहे हैं।ईएफ माइग्रेशन?

क्या कोई तरीका है कि ईएफ माइग्रेशन स्वचालित रूप से ग्राहकों को डीबी में परिवर्तन लागू करने में कैसे मदद कर सकता है?

+0

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

+0

यदि आप पहले डेटाबेस का उपयोग कर ईएफ माइग्रेशन के समान कार्यक्षमता चाहते हैं, तो [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

उत्तर

14

जहां तक ​​मुझे पता है, ईएफ माइग्रेशन कोडफर्स्ट पर लक्षित एक उत्पाद है और डेटाबेस फर्स्ट ऑपरेशंस का समर्थन नहीं करता है।

कोडफर्स्ट मानता है कि आप डेटाबेस में मैन्युअल रूप से कोई भी परिवर्तन नहीं करेंगे। डेटाबेस में सभी परिवर्तन पहले माइग्रेशन कोड के माध्यम से जाएंगे।

+3

धन्यवाद , ऐसा लगता है कि अद्यतन-स्क्रिप्ट वर्तमान में ईएफ के साथ जाने का एकमात्र तरीका है .. – Shaddix

+4

एक अच्छा विकल्प डेटाबेस प्रोजेक्ट/एसएसडीटी हो सकता है और स्कीमा तुलना कर सकता है। –

2

मुझे लगता है कि वहाँ है! आपको पहले कोड के माध्यम से अपना रास्ता जारी रखने की जरूरत है।

ऐसा करने के लिए, मान लीजिए कि आप निम्नलिखित DbContext है कि एफई Db पहले आपके लिए बनाया:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("Name=DefaultConnection") 
    { 

    } 

    // DbSets ... 
} 

परिवर्तन यह है कि पहली बार कोड का उपयोग शुरू करने के लिए निम्न और यह सभी जादू उपकरण (प्रवास करने, आदि ।):

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("YourDbFileName") 
    { 

    } 

    // DbSets ... 
} 

ऐसा नहीं है कि एफई नाम YourDbFileName के साथ अपने web.config फ़ाइल में अपने स्थानीय मशीन पर एसक्यूएल एक्सप्रेस का उपयोग कर एक नया कनेक्शन स्ट्रिंग बनाता है का कारण बनता है, बस जल्दी DefaultConnection Db की तरह कुछ पहले बनाया।

आपको अपने रास्ते को जारी रखने की आवश्यकता हो सकती है, क्या यह आपके सर्वर और अन्य विकल्पों के अनुसार YourDbFileName ConStr संपादित करें।

अधिक जानकारी here और here

0

बस अपने DbContext बच्चे वस्तु के लिए देखने के लिए और इस विधि के लिए देखो:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

आप इस टिप्पणी करते हैं:

throw new UnintentionalCodeFirstException(); 

तो अपवाद प्रवास आपरेशन पर फेंक दिया नहीं किया जाएगा। जैसा कि आप कल्पना कर सकते हैं, माइग्रेशन इस भाग के लिए यह जानने के लिए देखता है कि प्रत्येक इकाई के लिए कौन सी तालिका या तालिकाओं के साथ कॉन्फ़िगरेशन हैं।

क्षमा करें अगर मैं और अधिक जानकारी के साथ नहीं गया, अगर आप और अधिक चाहते हैं, तो मुझे इसे संपादित करने और इसे बेहतर बनाने में खुशी होगी!

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