ASP.NET CORE 2 - тип сущности 'IdentityUserRole <int>' определен с одним ключевым свойством, но 2 значения были переданы методу DbSet.Find - PullRequest
0 голосов
/ 26 мая 2018

Я получаю исключение при попытке добавить нового пользователя в роль:

ArgumentException: тип сущности 'IdentityUserRole' определен с одним ключевым свойством, но 2 значения были переданы вМетод 'DbSet.Find'.

Это было брошено в строке ниже

userManager.AddToRoleAsync(user, "Admin");

Этот метод в классе запуска:

private async Task CreateRoles(IServiceProvider serviceProvider) {
    //adding custom roles
    var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole<int>> > ();
    var userManager = serviceProvider.GetRequiredService<UserManager<UserEntity>>();
    string[] roleNames = { "Admin", "Manager", "User" };
    IdentityResult roleResult;

    foreach (var roleName in roleNames) {
        //creating the roles and seeding them to the database
        var roleExist = await roleManager.RoleExistsAsync(roleName);
        if (!roleExist) {
            roleResult = await roleManager.CreateAsync(
                new IdentityRole<int> {
                    Name = roleName,
                    NormalizedName = roleName.ToUpper()
                });
        }
    }

    //creating a super user who could maintain the web app
    var poweruser = new UserEntity {
        UserName = Configuration["AdminUserName"],
        Email = Configuration["AdminUserEmail"],
        Password = Configuration["AdminUserPassword"],
        ResidendceId = int.Parse(Configuration["AdminUserCountryId"])
    };

    string UserPassword = Configuration["AdminUserPassword"];
    UserEntity user = await userManager.FindByEmailAsync(Configuration["AdminUserEmail"]);

    if (user == null) {
        var createPowerUser = await userManager.CreateAsync(poweruser);
        user = poweruser;
    }

    var adminRoleList = await userManager.GetUsersInRoleAsync("Admin");
    if (user != null && !adminRoleList.Any(u => u.Email == user.Email)) {

        //here we tie the new user to the "Admin" role 
        await userManager.AddToRoleAsync(user, "Admin");
    }
}

Любойидея?Спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

В вашем классе DbContext добавьте следующее

builder.Entity<IdentityUserRole<int>>(b =>
{
    b.HasKey(i => new {i.UserId, i.RoleId});
});

Это должно дать DbFind два ключа, которые он ищет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...