Seed database for Identity 2

僤鯓⒐⒋嵵緔 提交于 2019-11-28 06:00:23
user3311522

This is the way to avoid using an OWIN context:

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");
}

I got this working by using:

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);   
...

Hi Under the Startup class please make sure that you have call app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContextApplicationUserManager.Create); app.CreatePerOwinContextApplicationSignInManager.Create);

app.CreatePerOwinContext(ApplicationRoleManager.Create);

Latest stuff is all async & uses Claims. Here's what worked for me with migrations to add a super user if none exists ...

    protected override void Seed(Holos.Service.Models.ApplicationDbContext context)
    {
        var email       = "xxxx@xxxx.com";
        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();
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!