L'exécution d'opérations de base de données impliquant la gestion des utilisateurs peut être complexe, comme en témoigne la difficulté rencontrée lors de la récupération tous les utilisateurs d'identité avec leurs rôles associés.
Comme décrit dans le contexte fourni, une erreur se produit lors de la tentative d'accès à la propriété Roles de chaque IdentityUser. Cette erreur est provoquée par des modifications apportées à l’entité IdentityUser dans .NET Core. Dans les versions antérieures, IdentityUser avait une propriété Roles, mais ce n'est plus le cas.
Pour surmonter ce problème, il faut créer des entités personnalisées pour représenter le rôle d'utilisateur relation.
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 Mise à jour :
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(); }); } }
Modification du démarrage :
services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128) .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
Récupération de données :
Chargez avec impatience le rôles et rôles des utilisateurs :
this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
En implémentant ces entités personnalisées et en mettant à jour le contexte de la base de données, vous pouvez récupérer tous les utilisateurs et leurs rôles associés dans .NET Core 2.1 Identity.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!