Изменить тип идентификатора asp.net core 2.2 IdentityUser - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в dot-net core 2.x, так что ...

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

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

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

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

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

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

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

Ответы [ 2 ]

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

Чтобы изменить тип ключа 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. Запустить команду для добавления и обновления базы данных

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

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

public class AppUser : IdentityUser<int> 
{

}

Затем зарегистрируйте ее:

services.AddDefaultIdentity<AppUser>()

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

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

...