将身份角色声明 Pk 类型更改为 Guid

Change Identity Role Claims Pk type as Guid

我已经用 Guid 作为主键 创建了一个包含所有标识表的数据上下文,但仍然是 IdentityUserClaimIdentityRoleClaim 迁移后的表仍然有 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)
    {
            
    }
}

enter image description here

Customize Identity Model 说:

The TKey for IdentityUserClaim is the type specified for the PK of users. In this case, TKey is string because the defaults are being used. It's not the PK type for the UserClaim entity type.

IdentityUserClaim class 看起来像这样:

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();
}

可以使用 EF Core 对身份 table 的非主键字段应用更新迁移,例如 IdentityUser 的自定义身份用户 table。但是,对于 ASP.NET Core Identity User、Roles、Claims table 上的新主键类型,您无法应用 EF Core 更新脚手架。

建议完全删除并重新创建。

应用以下内容:

  1. 删除身份 tables 和初始 EF Core 迁移。这是微软的推荐:

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

  1. 修改数据库上下文class(已经完成)。

  2. 在 Startup ConfigureServices 添加以下内容以使用通用用户:

    services.AddIdentity() .AddEntityFrameworkStores();

  3. 根据上下文重新创建数据库 tables。这可以使用:

    context.Database.EnsureCreated();

在启动配置()中。