6

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

लेकिन जब एप्लिकेशन किसी ग्राहक के सर्वर पर कहीं चल रहा है, तो मैं वास्तव में चाहता हूं कि मेरा एप्लिकेशन स्वचालित रूप से इसके डेटाबेस स्कीमा को नवीनतम संस्करण में अपडेट होने पर अपडेट कर दे।

क्या यह संभव है? दस्तावेज़ीकरण दुर्लभ है।

उत्तर

11

वे आरटीएम तक ऐसा करने का कोई तरीका नहीं दे रहे हैं, जिस बिंदु पर उन्होंने एक कमांड लाइन ऐप और एक एमएसडीओपी प्रदाता का वादा किया है। स्रोत: http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx

बेशक कि से संतुष्ट नहीं किया जा रहा है, PowerShell आदेश संकुल निर्देशिका में संग्रहीत और सादा पाठ, यह सिर्फ एक ही निर्देशिका में संग्रहीत एक विधानसभा बुलाया EntityFramework.Migrations.Commands लोड करने के लिए प्रकट होता है है।

कि विधानसभा के माध्यम से ट्रेसिंग मैं निम्नलिखित

public class MyContext : DbContext 
{ 
    static MyContext() 
    { 
    DbMigrationsConfiguration configuration = new DbMigrationsConfiguration() { 
     MigrationsAssembly = typeof(MyContext).Assembly, 
     ContextType = typeof(MyContext), 
     AutomaticMigrationsEnabled = true,     
    }; 

    DbMigrator dbMigrator = new DbMigrator(configuration);   
    dbMigrator.Update(null);    
    } 
} 

अद्यतन के साथ आया था: के बाद प्रयोग का एक सा मैं कुछ और कार्य

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

कोड जिसका मतलब है अपने Global.asaxApplication_Start विधि में जोड़ने के लिए

Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, NAMESPACE.TO.MIGRATIONS.Configuration>()); 

लाइन

DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration()); 
dbMigrator.Update(null);   
+3

कृपया ध्यान दें कि यह अब पुराना है, ईएफ 4.3 के आरटीएम में माइग्रेटडेटाडेटा टोटलैटवेर्सन नामक एक नया डेटाबेस प्रारंभकर्ता है। अधिक जानकारी के लिए http://stackoverflow.com/questions/9281423/entity-framework-4-3-run-migrations-at-plplication-start देखें। – Betty

+0

हालांकि संदर्भ कन्स्ट्रक्टर में प्रारंभकर्ता को सेट करने से पावरहेल स्क्रिप्ट में हस्तक्षेप होता है। मैं उपरोक्त कोड के साथ एक app_start मॉड्यूल का उपयोग करने के लिए वापस आ गया है। – Betty

4

इस समस्या के लिए एक और विकल्प है करने के लिए सरल है।