2014-05-09 11 views
14

के लिए बीज डेटाबेस मुझे पहचान v2 के साथ डेटाबेस बीजिंग के लिए एक समस्या आई। मैंने एमवीसी 5 प्रोजेक्ट से पहचान डेटा मॉडल को अपने डेटा एक्सेस लेयर में अलग कर दिया जहां मैंने ईएफ माइग्रेशन भी सेट किया। एक तो मैं कोड जो अंदर "IdentityConfig.cs" प्रारंभिक उपयोगकर्ता बना सकते हैं और मेरे बीज डेटाबेस है कि इसपहचान 2

protected override void Seed(Repository.DataContext.IdentityDb context) 
     { 

      // var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
      // var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>(); 
      var owinContext = new OwinContext(); 
      var userManager = owinContext.GetUserManager<ApplicationUserManager>(); 
      var roleManager = owinContext.Get<ApplicationRoleManager>(); 
      const string name = "[email protected]"; 
      const string password = "[email protected]"; 
      const string roleName = "Admin"; 

      // //Create Role Admin if it does not exist 
      var role = roleManager.FindByName(roleName); 
      if (role == null) 
      { 
       role = new IdentityRole(roleName); 
       var roleresult = roleManager.Create(role); 
      } 

      var user = userManager.FindByName(name); 
      if (user == null) 
      { 
       user = new ApplicationUser { UserName = name, Email = name }; 
       var result = userManager.Create(user, password); 
       result = userManager.SetLockoutEnabled(user.Id, false); 
      } 

      // // Add user admin to Role Admin if not already added 
      var rolesForUser = userManager.GetRoles(user.Id); 
      if (!rolesForUser.Contains(role.Name)) 
      { 
       var result = userManager.AddToRole(user.Id, role.Name); 
      } 
     } 

तरह लग रहा है अब जब मैं आदेश अद्यतन-डेटाबेस चला रहा हूँ अंदर कोड डाल करने के लिए उपयोग करने पर टिप्पणी की, मुझे मिल गया त्रुटि

Value cannot be null. 
Parameter name: manager 

ऐसा लग रहा है, मैं कोड

var userManager = owinContext.GetUserManager<ApplicationUserManager>(); 
var roleManager = owinContext.Get<ApplicationRoleManager>(); 

कोई भी सुझाव कृपया की इन दो पंक्तियों में अशक्त मिल रहा है?

protected override void Seed(Repository.DataContext.IdentityDb context) 
    var roleStore = new RoleStore<IdentityRole>(context); 
    var roleManager = new RoleManager<IdentityRole>(roleStore); 
    var userStore = new UserStore<ApplicationUser>(context); 
    var userManager = new UserManager<ApplicationUser>(userStore);    
    var user = new ApplicationUser { UserName = "sallen" }; 

    userManager.Create(user, "password");      
    roleManager.Create(new IdentityRole { Name = "admin" }); 
    userManager.AddToRole(user.Id, "admin"); 
} 
+4

देखो: https://raw.githubusercontent.com/OdeToCode/MVC5_Samples/master/identity/BasicIdentityWithDiagrams /Migrations/Configuration.cs मुझे नहीं लगता कि आप बीज विधि में ओविन का उपयोग करके सफलता प्राप्त करेंगे जबतक कि आप ऐप के अंदर से बीज नहीं चला रहे हैं। यदि आप पैकेज प्रबंधक कंसोल से बीज चलाते हैं तो ओविन चारों ओर या कॉन्फ़िगर नहीं होगा। – OdeToCode

उत्तर

25

इस तरह एक Owin संदर्भ का उपयोग कर से बचने के लिए है .CreatePerOwinContext (ApplicationDbContext.Create); app.CreatePerOwinContextApplicationUserManager.Create); ऐप। क्रेतेपेरऑविनकॉन्टेक्स्ट एप्प्लिकेशंस साइनइनमेनर। क्रेट);

ऐप। क्रेतेपेरऑविनकॉन्टेक्स्ट (एप्लिकेशनरोलमैनेजर.क्रेट);

1

मैं का उपयोग करके यह काम कर रहे हो गया है::

protected override void Seed(ApplicationDbContext context) 
     { 
      context.Configuration.LazyLoadingEnabled = true; 

      //var userManager = HttpContext.Current 
      // .GetOwinContext().GetUserManager<ApplicationUserManager>(); 

      //var roleManager = HttpContext.Current 
      // .GetOwinContext().Get<ApplicationRoleManager>(); 

      var roleStore = new RoleStore<ApplicationRole, int, ApplicationUserRole>(context); 
      var roleManager = new RoleManager<ApplicationRole, int>(roleStore); 
      var userStore = new UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>(context); 
      var userManager = new UserManager<ApplicationUser, int>(userStore); 
... 
0

हाय स्टार्टअप वर्ग के तहत सुनिश्चित करें कि आप एप्लिकेशन फोन है कि सुनिश्चित करें

0

नवीनतम सामग्री सभी async & दावों का उपयोग करती है। यहाँ माइग्रेशन के साथ मेरे लिए काम किया एक सुपर उपयोगकर्ता जोड़ने के लिए है, तो कोई भी मौजूद नहीं है ... लाइन 51 यहाँ पर

protected override void Seed(Holos.Service.Models.ApplicationDbContext context) 
    { 
     var email  = "[email protected]"; 
     var password = "xxxxx"; 
     var userStore = new UserStore<ApplicationUser>(context); 
     var userManager = new ApplicationUserManager(userStore); 

     var user = userManager.FindByEmailAsync(email).Result; 
     if (user == null) 
     { 
      var adminUser = new ApplicationUser() { Email = email, UserName = email }; 
      var result = userManager.CreateAsync(adminUser, password); 
      result.Wait(); 
      userManager.AddClaimAsync(adminUser.Id, new Claim("Read", "*")).Wait(); 
      userManager.AddClaimAsync(adminUser.Id, new Claim("Create", "*")).Wait(); 
      userManager.AddClaimAsync(adminUser.Id, new Claim("Update", "*")).Wait(); 
      userManager.AddClaimAsync(adminUser.Id, new Claim("Delete", "*")).Wait(); 
      userManager.AddClaimAsync(adminUser.Id, new Claim("UserType", "SuperUser")).Wait(); 
     } 
    } 
संबंधित मुद्दे