身份2的种子数据库

我遇到了使用Identity v2为数据库播种的问题。 我将IdentityModel从MVC5项目分离到我的数据访问层,我也设置了EF迁移。 所以我注释掉了在“IdentityConfig.cs”中使用的代码来创建初始用户并将代码放在我的种子数据库中,看起来像这样

protected override void Seed(Repository.DataContext.IdentityDb context) { // var userManager = HttpContext.Current.GetOwinContext().GetUserManager(); // var roleManager = HttpContext.Current.GetOwinContext().Get(); var owinContext = new OwinContext(); var userManager = owinContext.GetUserManager(); var roleManager = owinContext.Get(); const string name = "admin@admin.com"; const string password = "Admin@123456"; 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); } } 

现在当我运行命令update-database时,我收到了一个错误

 Value cannot be null. Parameter name: manager 

看起来,我在这两行代码中得到null

 var userManager = owinContext.GetUserManager(); var roleManager = owinContext.Get(); 

有什么建议吗?

这是避免使用OWIN上下文的方法:

 protected override void Seed(Repository.DataContext.IdentityDb context) var roleStore = new RoleStore(context); var roleManager = new RoleManager(roleStore); var userStore = new UserStore(context); var userManager = new UserManager(userStore); var user = new ApplicationUser { UserName = "sallen" }; userManager.Create(user, "password"); roleManager.Create(new IdentityRole { Name = "admin" }); userManager.AddToRole(user.Id, "admin"); } 

我通过使用:

 protected override void Seed(ApplicationDbContext context) { context.Configuration.LazyLoadingEnabled = true; //var userManager = HttpContext.Current // .GetOwinContext().GetUserManager(); //var roleManager = HttpContext.Current // .GetOwinContext().Get(); var roleStore = new RoleStore(context); var roleManager = new RoleManager(roleStore); var userStore = new UserStore(context); var userManager = new UserManager(userStore); ... 

嗨,在启动类下,请确保您已调用app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContextApplicationUserManager.Create); app.CreatePerOwinContextApplicationSignInManager.Create);

app.CreatePerOwinContext(ApplicationRoleManager.Create);

最新的东西都是异步和使用声明。 如果不存在超级用户,那么迁移对我来说是有用的…

  protected override void Seed(Holos.Service.Models.ApplicationDbContext context) { var email = "xxxx@xxxx.com"; var password = "xxxxx"; var userStore = new UserStore(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(); } }