我在那里看到这个问题。但是答案对我不起作用。

我创建了一个空的asp.net网站。 .NET 4.5

我通过Install-Package Microsoft.AspNet.Identity.Sample -pre在nuget中安装了示例

我无法运行初始化程序。所以我做了以下

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
        this.Database.Initialize(true);
    }

    static ApplicationDbContext()
    {
        // Set the database intializer which is run once during application start
        // This seeds the database with admin user credentials and admin role
        //

    }` `

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}


Rolemanager始终为null。我尝试了其他答案,但它们从未成功。除了上面显示的内容外,我没有更改示例。那为什么不起作用呢?数据库和表是通过创建的。 rolemanager在下面使用,为空。

 public static void InitializeIdentityForEF(ApplicationDbContext db)
    {
        var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
        const string name = "[email protected]";
        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)

最佳答案

刚刚完成此工作,并提出了:

public static void InitializeIdentityForEF(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);
...


这似乎已经解决了我的Seed方法中其余的问题。使用Create和FindByName的RoleManager / UserManager异步方法时遇到一些问题,建议您同步进行所有操作。

09-07 01:07