21

मेरे पास एक एमवीसी 4 वेब एप्लिकेशन है जो एंटीटी फ्रेमवर्क 5.0 कोड फर्स्ट का उपयोग करता है।एंटिटी फ्रेमवर्क और सदस्यता तालिका के साथ डेटाबेस कैसे प्रारंभ करें

Global.asax.cs में मेरे पास बूटस्ट्रैपर है जो Entity.Database प्रारंभ करता है, डेटाबेस को प्रारंभ करने के लिए मजबूर करता है और सदस्यता के लिए डेटाबेस प्रारंभ करता है।

System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer()); 
Database.Initialize(true); 
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true); 

DatabaseContextInitializer पल के लिए बहुत सरल है::

WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true); 

क्योंकि:

public class DatabaseContextInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext> 
{ 
    protected override void Seed(DatabaseContext dbContext) 
    { 
     base.Seed(dbContext); 
     db.Set<Workout>().Add(new Workout {Id = 1, Name = "My First workout user1"}) 

    } 
} 

समस्या यह है कि मैं के साथ सदस्यता के लिए उपयोगकर्ता नहीं बना पा रहा है कोड इस एक है मुझे समस्या है कि डेटाबेस नहीं बनाया गया है। एंटिटी फ्रेमवर्क 5.0 और एएसपी.नेट एमवीसी 4 के साथ आप अपने डेटाबेस के लिए कुछ डिफ़ॉल्ट उपयोगकर्ता कैसे प्रारंभ करते हैं?

उत्तर

33

माइग्रेशन का उपयोग करके अपने डेटाबेस को बीजिंग के लिए अनुशंसित दृष्टिकोण के लिए following article पर एक नज़र डालें।

  1. एक नया ASP.NET MVC 4 इंटरनेट खाका
  2. निम्न आदेश का उपयोग कर अपने पैकेज प्रबंधक कंसोल प्रकार में आवेदन बनाएँ::

    enable-migrations 
    
  3. ये कदम उठाएँ यह ~/Migrations/Configuration.cs फ़ाइल बनाएगा जिसमें आप अपना डेटाबेस बीज कर सकते हैं:

    using System.Data.Entity.Migrations; 
    using System.Linq; 
    using System.Web.Security; 
    using WebMatrix.WebData; 
    
    internal sealed class Configuration : DbMigrationsConfiguration<MvcApplication1.Models.UsersContext> 
    { 
        public Configuration() 
        { 
         AutomaticMigrationsEnabled = true; 
        } 
    
        protected override void Seed(MvcApplication1.Models.UsersContext context) 
        { 
         WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
    
         if (!Roles.RoleExists("Administrator")) 
         { 
          Roles.CreateRole("Administrator"); 
         } 
    
         if (!WebSecurity.UserExists("john")) 
         { 
          WebSecurity.CreateUserAndAccount("john", "secret"); 
         } 
    
         if (!Roles.GetRolesForUser("john").Contains("Administrator")) 
         { 
          Roles.AddUsersToRoles(new[] { "john" }, new[] { "Administrator" }); 
         } 
        } 
    } 
    
  4. memebership और अपने web.config में भूमिका प्रदाताओं का उल्लेख करें:

    <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
        <providers> 
        <clear/> 
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> 
        </providers> 
    </roleManager> 
    <membership defaultProvider="SimpleMembershipProvider"> 
        <providers> 
        <clear/> 
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
        </providers> 
    </membership> 
    
  5. भागो अपने पैकेज प्रबंधक कंसोल में पलायन:

    update-database -verbose 
    
+0

हाय, मैं इस समाधान कर सकते हैं आधा रास्ता मेरे पास वास्तव में अपडेट-डेटाबेस को दो बार चलाने के लिए है क्योंकि पहली बार डेटाबेस बनाया गया है लेकिन टेबल नहीं। मुझे त्रुटि है "लॉग इन द्वारा अनुरोध किया गया डेटाबेस" वर्कआउटप्लानरबीबी "नहीं खोल सकता। लॉगिन विफल हुआ।" मुझे लगता है कि ऐसा इसलिए है क्योंकि प्रारंभिक डेटाबेस कनेक्शन पहले के उपयोग के बजाय एक नया कनेक्शन फिर से खोलता है? –

+2

स्वचालित माइग्रेशनएनेबल = सत्य; उपयोग करने के लिए बहुत डरावना है। जब भी आप अपना कोड-पहला डीबीकॉन्टेक्स्ट बदलते हैं और उत्पादन वातावरण में कभी भी इसका उपयोग नहीं किया जाना चाहिए, यह स्वचालित रूप से डेटाबेस माइग्रेट करता है। डीबी में परिवर्तनों को तोड़ने से ठीक होना बेहद मुश्किल है, क्योंकि आपके पास वापस पता लगाने के लिए कोई माइग्रेशन कदम नहीं है। कोड-प्रथम डीबी मॉडल में प्रत्येक परिवर्तन के लिए माइग्रेशन चरणों को स्पष्ट रूप से जोड़ने के लिए "एड-माइग्रेशन" का उपयोग करें। – angularsen

+3

@Darin: एक पुराना प्रश्न उठाने के लिए खेद है, लेकिन क्या यह तब भी लागू होगा यदि आप अपने वेब प्रोजेक्ट से ईएफ संदर्भ को अलग करते हैं? मैं कल्पना नहीं कर सकता कि आप वेबमैट्रिक्स का संदर्भ लेंगे। * और System.Web.Security ने बनाई गई निर्भरताओं के रूप में जो डेटा स्तर पर मौजूद नहीं होना चाहिए ... (शायद मुझे इसके लिए कोई प्रश्न बनाना चाहिए?) –