执行涉及用户管理的数据库操作可能很复杂,例如检索时遇到的困难所有身份用户及其关联角色。
如所提供的上下文中所述,尝试访问每个 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中文网其他相关文章!