实体框架Core with Identity和ASP.NET Core RC2无法在数据库中创建用户

时间:2016-06-27 12:25:00

标签: asp.net-core entity-framework-core

我正在使用身份验证的应用程序。我使用以下框架:

  • ASP.NET Core RC2
  • 实体框架核心
  • Npgsql EFCore驱动程序

对于种子,我创建了一个DataSeeder类,它在ConfigureServices函数中添加为Transient Service,稍后在Configure函数中调用。它检查是否存在IdentityUser,如果不存在,则会创建一个名为admin的管理员,并将角色Admin添加到其中。

但是,在向用户添加角色时,我得到一个异常,说明违反了外键约束,并且ASP_NET_USERS不包含具有该PK的条目。

我检查了数据库,它确实包含我创建的新角色,但用户表仍然是空的。

这是我的DataSeeder课程:

public class DataSeeder {
    private DatabaseContext _context;
    private UserManager<IdentityUser> _userManager;
    private RoleManager<IdentityRole> _roleManager;

    public DataSeeder(DatabaseContext ctx, UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager) {
        _context = ctx;
        _userManager = userManager;
        _roleManager = roleManager;
    }

    public async Task CreateUserAsync() {
        if (! await _userManager.Users.AnyAsync()) {
            var adminRole = new IdentityRole("admin");
            var rootRole = new IdentityRole("root");

            await _roleManager.CreateAsync(adminRole);
            await _roleManager.CreateAsync(rootRole);

            var user = new IdentityUser {
                Email = "blabla@example.com",
                EmailConfirmed = true,
                UserName = "superadmin"
            };

            await _userManager.CreateAsync(user, "P@SSWORD");

            await _userManager.AddClaimAsync(user, new Claim("role", "admin"));
        }
    }
}

因此AddClaimAsync抛出了异常。任何帮助都会非常感激

1 个答案:

答案 0 :(得分:1)

检查_userManager.createAsync的结果。

var result = await _userManager.CreateAsync(user, "P@SSWORD");

if (!result.Succeeded)
{
    // something went wrong, inspect the errors
}

您很可能发现IdentityUser上的必需属性丢失或密码无效。