c# - 身份 2 的种子数据库

标签 c# asp.net-identity-2

我遇到了使用 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);
            }
        }  

现在当我运行命令 update-database 时,出现错误

Value cannot be null.
Parameter name: manager

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

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

有什么建议吗?

最佳答案

这是避免使用 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");
}

关于c# - 身份 2 的种子数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574591/

相关文章:

c# - 从引用列表中查找列表中的重复项

c# - 使用 C# 以编程方式更改 ipsec 规则的方法?

c# - 代码首先定义外键到 "external"表

c# - 如何知道 ListView 中哪个 Xamarin Forms 条目已被修改?

asp.net core身份提取并保存外部登录 token 并向本地身份添加声明

angularjs - 如何处理 Identity 2.1 SPA Angular JS 应用程序中的电子邮件确认 URL?

ASP.net Identity 2.0,如何删除用户但限制用户名再次使用?

c# - ASP.Net MVC 用户列表及其角色

c# - 模拟接口(interface) { get; } 只有(最小起订量)

c# - 在 ASP.NET Web 应用程序之外获取 UserManager 实例?