Изменить тип идентификатора asp.net core 2.2 IdentityUser

Я новичок в Dot-Net Core 2.x, так что...

Я хотел бы изменить тип идентификатора в asp.net core 2.2 IdentityUser со строки на int.

Все примеры, которые я нашел через google (и средство поиска stackru), дают мне примеры asp.net core 2.0, который предоставляет ApplicationUser, когда вы защищаете Identity (который 2.2 не предоставил).

ТАК, я в растерянности.. Первое, что я попробовал (на что я возлагал большие надежды) было:

services.AddDefaultIdentity<IdentityUser<int>>()
  .AddRoles<IdentityRole>()
  .AddDefaultTokenProviders()
  .AddEntityFrameworkStores<ApplicationDbContext>();

Но я получаю следующую ошибку при попытке Add-Migration InitialCreate -Context ApplicationDbContext:

Произошла ошибка при доступе к IWebHost в классе "Программа". Продолжая без поставщика услуг приложения. Ошибка: GenericArguments[0], "Microsoft.AspNetCore.Identity.IdentityUser`1[System.Int32]", в "Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,TKey,TUserClaim,TUserClaim, TU" TUserLogin,TUserToken,TRoleClaim]'нарушает ограничение типа' TUser '

Мысли? Идеи? Документацию я могу прочитать?

2 ответа

Для изменения типа ключа IdentityUser со строки на int вам также необходимо изменить IdentityDbContext в IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>,

  1. Startup.cs

    services.AddDefaultIdentity<IdentityUser<int>>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  2. ApplicationDbContext

    public class ApplicationDbContext : IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    
  3. Удалить Migrations папку и удалить существующую базу данных

  4. Запустите команду для добавления и обновления базы данных

Вы можете написать свою собственную реализацию, которая происходит от IdentityUser

public class AppUser : IdentityUser<int> 
{

}

Тогда зарегистрируйте это:

services.AddDefaultIdentity<AppUser>()

Это также полезно, если вы хотите добавить дополнительные свойства в вашу пользовательскую модель.

Помните, что поскольку вы изменяете первичный ключ таблиц, вам нужно будет воссоздать эти таблицы, а не обновлять их.

Другие вопросы по тегам