以下代码不起作用,我无法解释原因...我的用户管理器造成了极大的困扰,因为它可以很好地创建用户和角色,但是当我运行此代码时,userManager.IsInRole始终返回false,因此第二个运行种子时,我遇到了错误,因为尽管事实已经存在,但它仍在尝试创建记录!

请注意,这是在我针对迁移项目运行更新数据库时发生的,这是否是非ASP项目引起的事实,如果是的话,为什么?不应该引发错误。

这是我使用Identity的第一个项目,尽管它看起来不错,但几乎没有最新的高质量文档,因此,如果有人对此有任何资源,我将不胜感激。

    public void Run(BlogContext blogContext)
    {
        var userStore = new UserStore<User>((BlogContext) blogContext);
        var userManager = new UserManager<User>(userStore);

        var userRoles = new List<UserRole>()
        {
            new UserRole() {Username = "[email protected]", Role = "SysAdmin"},
            new UserRole() {Username = "[email protected]", Role = "Admin"},
            new UserRole() {Username = "[email protected]", Role = "Author"}
        };

        foreach (var userRole in userRoles)
        {
            var userId = userManager.FindByName(userRole.Username).Id;

            if (!userManager.IsInRole(userId, userRole.Role))
                userManager.AddToRole(userId, userRole.Role);
        }


        blogContext.SaveChanges();
    }

最佳答案

因此,我自己回答这个问题,以节省任何人因此而遭受的痛苦。

发生这种情况的原因是,我禁用了延迟加载,因此已经在我的Migrations项目中启用了此功能。

protected override void Seed(BlogContext blogContext)
    {
        AutomaticMigrationsEnabled = true;
        blogContext.Configuration.LazyLoadingEnabled = true;
        //Add seed classes here!
    }

10-07 12:08