Die Durchführung von Datenbankvorgängen mit Benutzerverwaltung kann komplex sein, wie die Schwierigkeiten beim Abrufen zeigen alle Identitätsbenutzer mit den ihnen zugeordneten Rollen.
Wie im bereitgestellten Kontext beschrieben, tritt beim Versuch, auf die Roles-Eigenschaft jedes IdentityUser zuzugreifen, ein Fehler auf. Dieser Fehler wird durch Änderungen an der IdentityUser-Entität in .NET Core verursacht. In früheren Versionen hatte IdentityUser früher eine Roles-Eigenschaft, aber das ist nicht mehr der Fall.
Um dieses Problem zu lösen, müssen benutzerdefinierte Entitäten erstellt werden, um die darzustellen Benutzerrolle Beziehung.
ApplicationUser:
public class ApplicationUser : IdentityUser { public ICollection<ApplicationUserRole> UserRoles { get; set; } }
ApplicationUserRole:
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 Update:
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(); }); } }
Startänderung:
services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128) .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
Datenabruf:
Laden Sie eifrig die Benutzerrollen und Rollen:
this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
Durch die Implementierung dieser benutzerdefinierten Entitäten und die Aktualisierung der Im Datenbankkontext können Sie alle Benutzer und die ihnen zugeordneten Rollen in .NET Core 2.1 Identity abrufen.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Benutzer und ihre zugehörigen Rollen in der .NET Core 2.1-Identität effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!