Изменить тип идентификатора 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>
,
Startup.cs
services.AddDefaultIdentity<IdentityUser<int>>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext
public class ApplicationDbContext : IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
Удалить
Migrations
папку и удалить существующую базу данныхЗапустите команду для добавления и обновления базы данных
Вы можете написать свою собственную реализацию, которая происходит от IdentityUser
public class AppUser : IdentityUser<int>
{
}
Тогда зарегистрируйте это:
services.AddDefaultIdentity<AppUser>()
Это также полезно, если вы хотите добавить дополнительные свойства в вашу пользовательскую модель.
Помните, что поскольку вы изменяете первичный ключ таблиц, вам нужно будет воссоздать эти таблицы, а не обновлять их.