首页 >数据库 >mysql教程 >如何高效检索.NET Core 2.1 Identity中的所有用户及其关联角色?

如何高效检索.NET Core 2.1 Identity中的所有用户及其关联角色?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-02 07:29:10461浏览

How to Efficiently Retrieve All Users and Their Associated Roles in .NET Core 2.1 Identity?

如何检索 .NET Core 2.1 Identity 中具有关联角色的所有用户

执行涉及用户管理的数据库操作可能很复杂,例如检索时遇到的困难所有身份用户及其关联角色。

问题:关系访问错误

如所提供的上下文中所述,尝试访问每个 IdentityUser 的 Roles 属性时会发生错误。此错误是由 .NET Core 中的 IdentityUser 实体更改引起的。在早期版本中,IdentityUser 曾经具有 Roles 属性,但现在情况已不再如此。

解决方案:实现自定义实体

要解决此问题,必须创建自定义实体来表示用户角色关系。

应用程序用户:

public class ApplicationUser : IdentityUser
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

应用程序用户角色:

public class ApplicationUserRole : IdentityUserRole<string>
{
    public virtual ApplicationUser User { get; set; }
    public virtual ApplicationRole Role { get; set; }
}

ApplicationRole:

public class ApplicationRole : IdentityRole
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

DbContext更新:

public class ApplicationDbContext
    : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>,
    ApplicationUserRole, IdentityUserLogin<string>,
    IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<ApplicationUserRole>(userRole =>
        {
            userRole.HasKey(ur => new { ur.UserId, ur.RoleId });

            userRole.HasOne(ur => ur.Role)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();

            userRole.HasOne(ur => ur.User)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });
    }
}

启动修改:

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

数据检索:

立即加载用户角色和角色:

this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();

通过实现这些自定义实体并更新数据库上下文,您可以检索 .NET Core 2.1 Identity 中的所有用户及其关联角色。

以上是如何高效检索.NET Core 2.1 Identity中的所有用户及其关联角色?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn