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

问题描述 投票:0回答:3

我已经创建了一个包含所有以 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)
    {
            
    }
}

在此输入图片描述

c# .net .net-core entity-framework-core asp.net-identity
3个回答
1
投票

自定义身份模型 说:

IdentityUserClaim 的 TKey 是为 PK 指定的类型 用户数。在本例中,TKey 是字符串,因为默认值是 用过的。它不是 UserClaim 实体类型的 PK 类型。

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

0
投票

可以使用 EF Core 对身份表非主键字段(例如 IdentityUser 的自定义身份用户表)应用更新迁移。但是,对于 ASP.NET Core Identity 用户、角色、声明表上的新主键类型,您无法应用 EF Core 更新支架。

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

应用以下内容:

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

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

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

  2. 在启动配置服务中添加以下内容以使用通用用户:

    services.AddIdentity() .AddEntityFrameworkStores();

  3. 从上下文重新创建数据库表。这可以使用以下方法完成:

    context.Database.EnsureCreated();

在启动配置()中。


0
投票

无法更新

IdentityUserClaim
IdentityRoleClaim
表的主键类型。库内部实现依赖于
Id
列作为整数。

我想出于更安全的原因,您更喜欢 Guid 而不是 Int。但是,请记住,这些 id 是内部的,不应暴露在服务器外部,因此可以将它们设置为整数。

当然,建议像您一样将

UserId
RoleId
string
更改为
Guid
。与
RoleClaims
UserClaims
表相反,这些表暴露给客户端,因此,强烈建议它们使用 Guid 主键而不是整数。

© www.soinside.com 2019 - 2024. All rights reserved.