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

如何高效检索.NET Core 2.1身份用户及其关联角色?

Linda Hamilton
发布: 2024-12-17 15:40:11
原创
729 人浏览过

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

获取 .NET Core 2.1 Identity 用户和关联角色

在 .NET Core Identity 中,检索用户及其关联角色可能具有挑战性。虽然早期版本的 Identity 在 ApplicationUser 中提供了内置 Roles 属性,但此功能已不再存在。

解决方案

要解决此问题,请实施以下操作解决方案:

ApplicationUser

public class ApplicationUser : IdentityUser
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}
登录后复制

ApplicationUserRol e

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; }
}
登录后复制

ApplicationDbContext (添加关系,配置种子)

public class ApplicationDbContext
    : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>,
    ApplicationUserRole, IdentityUserLogin<string>,
    IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    public DbSet<ApplicationUserRole> UserRoles { get; set; }

    // migrations omitted for brevity
}
登录后复制

启动

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
登录后复制

Razor 页面代码(立即加载相关数据)

this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
登录后复制

ASP 核心 2.2更新

对于 ASP Core 2.2 及更高版本,固有于 IdentityUserRole;不是字符串。此外,可能需要删除模型构建器中的代码才能成功迁移。

我尝试遵循建议的解决方案,但导致错误:“‘field’中的未知列‘u.Roles.ApplicationUserId’列表''。为了解决这个问题,我研究了 GitHub 评论/问题并实施了上述解决方案。关键修改涉及创建新的 ApplicationUserRole 和 ApplicationRole 类、更新 ApplicationUser 类以反映新关系,以及向 DbContext 中的模型构建器添加自定义配置。通过预先加载用户的 UserRoles,然后加载 UserRole 的角色,我能够成功检索用户及其关联的角色。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板