44

मैं उन परिस्थितियों को कैसे संभाल सकता हूं जिनमें मुझे ऐप शुरू होने से पहले या डेटाबेस उत्पन्न होने के ठीक पहले पूर्व-मौजूदा डेटा की आवश्यकता है। उदाहरण के लिए, मेरे पास कोडों के बाद डेटाबेस में लोड करना चाहते हैं, जिन देशों में मैं इसे उत्पन्न करता हूं। मैं यह कैसे करु?एंटीटी फ्रेमवर्क कोड-डेटाबेस में पहला डिफ़ॉल्ट डेटा

अनुप्रयोग इस प्रकार संरचित है:

Repository > Service > WebMVC

एक्सएमएल WebMVC परियोजना में है।

उत्तर

67

आप कस्टम प्रारंभकर्ता बनाते हैं, जो DropCreateDatabaseIfModelChanges या DropCreateDatabaseAlways इंटरफ़ेस से प्राप्त होता है। जैसा:

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext-> 

और फिर आप बीज विधि के ऊपर लिख तरह:

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<EntitiesContext> 
{ 
    protected override void Seed(EntitiesContext context) 
    { 
     List<Role> roles = new List<Role> 
     { 
      new Role {Id=1, Title="Admin"}, 
      new Role {Id=2, Title="ProjectManager"}, 
      new Role {Id=3, Title="Developer"} 
     }; 

     // add data into context and save to db 
     foreach (Role r in roles) 
     { 
      context.Roles.Add(r); 
     } 
     context.SaveChanges(); 

    } 
} 

संपादित करें::

protected override void Seed(YourDbContext context) 

पूरे उदाहरण की तरह लग सकता है इसे सेट अप करने के बाद, आप प्रारंभकर्ता स्थापित करने के लिए है भी, जैसा कि Ladislav Mrnka का उल्लेख किया।

Database.SetInitializer(new EntitiesContextInitializer()); 

यानी .: Global.asax में:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
    Database.SetInitializer(new EntitiesContextInitializer()); 
} 

using System.Data.Entity; जोड़ने के लिए मत भूलना .....

+0

यह केवल भूमिकाओं की सूची बनाएगा। आपको उन्हें संदर्भ में जोड़ना होगा और परिवर्तनों को सहेजना होगा। –

+0

सच है, इसे इंगित करने के लिए धन्यवाद। – Damb

+0

@Dampe क्या मैं webUI प्रोजेक्ट में डेटाबेस.SetInitializer का उपयोग कर सकता हूं या क्या यह डीबीकॉन्टेक्स्ट बनाने के लिए है? –

10

आपको DropCreateDatabaseIfModelChanges से उदाहरण के लिए व्युत्पन्न कस्टम डेटाबेस प्रारंभकर्ता बनाना होगा और ओवरराइड Seed विधि में डेटा भरना होगा। फिर आवेदन शुरू होने पर आपको अपना नया प्रारंभकर्ता सेट करने के लिए Database.SetInitializer का उपयोग करना होगा। Here उदाहरण है (सीटीपी 5 से) डेटाबेस में कस्टम इंडेक्स बनाने के लिए प्रयोग किया जाता है।

+0

क्योंकि मैं केवल वेब फ्रंट एंड से फ़ाइल एक्सेस कोड का उपयोग कर सकता हूं, क्या मेरे लिए प्रारंभकर्ता को कॉल करने या डेटा को पास करने का कोई तरीका है? –

+0

आप कस्टम कोड में प्रारंभिकता को लपेट सकते हैं और उस वेब पर वेब ऐप से डेटा पास कर सकते हैं जो बदले में आपके प्रारंभकर्ता के नए उदाहरण को डेटा पास कर देगा। –

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