Изменение роли удостоверения Утверждает, что Тип Pk в качестве идентификатора Guid

#c# #.net #.net-core #entity-framework-core #asp.net-identity

Вопрос:

Я создал datacontext со всеми таблицами идентификаторов с идентификатором Guid в качестве первичного ключа, но все равно таблицы IdentityUserClaim и IdentityRoleClaim после миграции по-прежнему имеют int в качестве первичного ключа. есть ли какой-либо способ изменить это на идентификатор Guid в качестве первичного ключа

 public class DataContext: IdentityDbContext<IdentityUser<Guid>, IdentityRole<Guid>, Guid, IdentityUserClaim<Guid>, IdentityUserRole<Guid>, IdentityUserLogin<Guid>, IdentityRoleClaim<Guid>, IdentityUserToken<Guid>>
{
    public DataContext(DbContextOptions<DataContext> options): base(options)
    {
            
    }
}
 

введите описание изображения здесь

Комментарии:

1. я использую .net core 5.0 и первый подход к основному коду entityframework

2. Можете ли вы показать миграцию?

Ответ №1:

Настройка модели идентификации говорит:

TKey для IdentityUserClaim-это тип, указанный для PK пользователей. В этом случае TKey является строкой, поскольку используются значения по умолчанию. Это не тип PK для типа сущности UserClaim.

И класс IdentityUserClaim выглядит так:

 public class IdentityUserClaim<TKey> where TKey : IEquatable<TKey>
{
    public virtual int Id { get; set; }

    public virtual TKey UserId { get; set; }

    public virtual string ClaimValue { get; set; }

    public virtual void InitializeFromClaim(Claim claim);

    public virtual Claim ToClaim();
}
 

Комментарии:

1. спасибо за помощь. есть ли какой-либо другой способ переопределить первичный ключ с помощью Guid

2. Попробуйте создать свой собственный класс MyIdentityUserClaim и использовать его в IdentityDbContext и везде вместо IdentityUserClaim, хотя я не знаю, сработает ли это.

3. спасибо за помощь и поддержку. я действительно попробовал их, но это не сработало.

Ответ №2:

Можно применить миграцию обновлений с помощью EF Core к таблицам удостоверений, не являющимся полями первичного ключа, таким как пользовательская таблица идентификаторов пользователя для IdentityUser. Однако для нового типа первичного ключа на ASP.NET Основные пользователи удостоверений, Роли, таблицы утверждений Вы не можете применить каркас обновления ядра EF.

Рекомендуется полное удаление и повторное создание.

Примените следующее:

  1. Удалите таблицы идентификаторов и начальную миграцию ядра EF. Это рекомендация от корпорации Майкрософт:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-5.0

  1. Измените класс контекста БД (уже сделано).
  2. В настройках запуска добавьте следующее, чтобы использовать обычного пользователя:

    Услуги.AddIdentity<Пользователь идентификатора>() .AddEntityFrameworkStores();

  3. Воссоздайте таблицы базы данных из контекста. Это можно сделать с помощью:

    контекст.База данных.Обеспечено();

в настройках запуска().

Комментарии:

1. Я делал это много раз, но все равно pk таблицы userclaims равен int