C# 标识2的种子数据库

C# 标识2的种子数据库,c#,asp.net-identity-2,C#,Asp.net Identity 2,我遇到了一个问题,即在数据库中植入Identity v2。我将IdentityModel从MVC5项目分离到我的数据访问层,在那里我还设置了EF迁移。所以我注释掉了使用“IdentityConfig.cs”创建初始用户的代码,并将代码放入我的种子数据库中,如下所示 protected override void Seed(Repository.DataContext.IdentityDb context) { // var userManage

我遇到了一个问题,即在数据库中植入Identity v2。我将IdentityModel从MVC5项目分离到我的数据访问层,在那里我还设置了EF迁移。所以我注释掉了使用“IdentityConfig.cs”创建初始用户的代码,并将代码放入我的种子数据库中,如下所示

  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 = "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);
            }
        }  
看起来,我在这两行代码中得到了null

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

有什么建议吗?

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

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");
}
protected override void Seed(Repository.DataContext.IdentityDb context)
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
var userStore=新的userStore(上下文);
var userManager=newusermanager(userStore);
var user=newapplicationuser{UserName=“sallen”};
创建(用户,“密码”);
Create(新的IdentityRole{Name=“admin”});
userManager.AddToRole(user.Id,“admin”);
}

我是通过以下方法实现这一点的:

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);   
...
受保护的重写无效种子(ApplicationDbContext上下文)
{
context.Configuration.LazyLoadingEnabled=true;
//var userManager=HttpContext.Current
//.GetOwinContext().GetUserManager();
//var rolemager=HttpContext.Current
//.GetOwinContext().Get();
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
var userStore=新的userStore(上下文);
var userManager=newusermanager(userStore);
...

您好,在Startup类下,请确保您有呼叫 app.CreatePerOwinContext(ApplicationDbContext.Create);app.CreatePerOwinContextApplicationUserManager.Create); app.createPeroWinContextApplicationsIgnnManager.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<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();
        }
    }
protected override void Seed(Holos.Service.Models.ApplicationDbContext上下文)
{
var电子邮件=”xxxx@xxxx.com";
var password=“xxxxx”;
var userStore=新的userStore(上下文);
var userManager=新的ApplicationUserManager(userStore);
var user=userManager.findbyemailsync(email).Result;
if(user==null)
{
var adminUser=new ApplicationUser(){Email=Email,UserName=Email};
var result=userManager.CreateAsync(adminUser,密码);
result.Wait();
userManager.addClaudisync(adminUser.Id,新声明(“Read”、“*”)).Wait();
userManager.AddClaudeSync(adminUser.Id,新声明(“创建”、“*”)).Wait();
userManager.AddClaudeSync(adminUser.Id,新声明(“更新”、“*”)).Wait();
userManager.AddClaudeSync(adminUser.Id,新声明(“删除”、“*”)).Wait();
userManager.addClaudeSync(adminUser.Id,新声明(“UserType”,“SuperUser”)).Wait();
}
}
请看第51行:我认为在Seed方法中使用Owin不会成功,除非您从应用程序内部运行Seed。如果您从package manager控制台运行Seed,Owin将不会出现或配置。
    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();
        }
    }