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

Posted

技术标签:

【中文标题】将身份角色声明 Pk 类型更改为 Guid【英文标题】:Change Identity Role Claims Pk type as Guid 【发布时间】:2021-08-05 06:17:55 【问题描述】:

我创建了一个数据上下文,其中所有身份表都以 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

【问题讨论】:

我正在使用 .net core 5.0 和 entityframework 核心代码优先方法 你能显示迁移吗? 【参考方案1】:

Customize Identity Model 说:

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

【讨论】:

感谢您的帮助。有没有其他方法可以用 Guid 覆盖主键 尝试创建自己的类 MyIdentityUserClaim 并在 IdentityDbContext 和其他任何地方使用它,而不是 IdentityUserClaim,我不知道它是否会起作用。 感谢您的帮助和支持。我确实试过了,但也没有用。【参考方案2】:

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

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

应用以下内容:

    删除标识表和初始 EF Core 迁移。这是 Microsoft 的建议:

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

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

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

    services.AddIdentity() .AddEntityFrameworkStores();

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

    context.Database.EnsureCreated();

在启动配置()中。

【讨论】:

我已经做了很多次这些事情,但是 userclaims 表的 pk 仍然是 int

以上是关于将身份角色声明 Pk 类型更改为 Guid的主要内容,如果未能解决你的问题,请参考以下文章

实体框架更改 Id 类型

在数据库项目中将 Int 更改为 uniqueidentifier

WordPress 用户角色自动更改

如何在 vb6 中更改 DCOM 的 guid?

Mozilla FireFox页面根据身份验证类型控制更改

用户角色播种失败