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

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

Linda Hamilton
发布: 2024-12-09 19:47:24
原创
768 人浏览过

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

在 .NET Core 2.1 中检索用户和关联角色

在管理用户及其角色时,拥有一种有效检索两者的机制至关重要。本文深入探讨了如何使用 Identity Framework 在 .NET Core 2.1 中完成此任务。

初始尝试和问题

一种常见方法涉及修改 ApplicationUser 类以包含 Roles 属性。但是,.NET Core 不再支持此功能。尝试使用此实现将导致在查询中包含角色时出错。

实现自定义关系表

要解决此问题,需要自定义关系表。该表将连接 ApplicationUser 和 IdentityRole 表,使我们能够检索用户及其关联的角色。

以下实体定义此关系:

  • ApplicationUser:代表应用程序用户。
  • ApplicationUserRole:将用户链接到角色。
  • ApplicationRole:代表应用程序

配置 DbContext

必须更新 ApplicationDbContext 以处理这些实体及其关系:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        // Define the relationship between ApplicationUser and ApplicationUserRole
        builder.Entity<ApplicationUserRole>()
            .HasKey(ur => new { ur.UserId, ur.RoleId });
        builder.Entity<ApplicationUserRole>()
            .HasOne(ur => ur.User)
            .WithMany(u => u.UserRoles)
            .HasForeignKey(ur => ur.UserId)
            .IsRequired();
        builder.Entity<ApplicationUserRole>()
            .HasOne(ur => ur.Role)
            .WithMany(r => r.UserRoles)
            .HasForeignKey(ur => ur.RoleId)
            .IsRequired();
    }
}
登录后复制

Razor 页面中的预加载

为了检索用户及其关联的角色,将以下代码添加到 Razor页面:

public IActionResult OnGetAsync()
{
    this.Users = userManager.Users
        .Include(u => u.UserRoles)
        .ThenInclude(ur => ur.Role)
        .ToList();
    return Page();
}
登录后复制

“.Include(u => u.UserRoles)”部分急切地加载每个用户的 UserRoles。 “.ThenInclude(ur => ur.Role)”部分进一步急切地加载每个 UserRole 的 Role。这确保了用户及其角色在模型中可用。

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

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