Maison > base de données > tutoriel mysql > Comment récupérer efficacement les utilisateurs et leurs rôles associés dans .NET Core 2.1 ?

Comment récupérer efficacement les utilisateurs et leurs rôles associés dans .NET Core 2.1 ?

Linda Hamilton
Libérer: 2024-12-09 19:47:24
original
767 Les gens l'ont consulté

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

Récupération des utilisateurs et des rôles associés dans .NET Core 2.1

Dans la gestion des utilisateurs et de leurs rôles, il est crucial de disposer d'un mécanisme permettant de récupérer les deux efficacement. Cet article explique comment accomplir cette tâche dans .NET Core 2.1 à l'aide d'Identity Framework.

Tentatives et problèmes initiaux

Une approche courante consiste à modifier la classe ApplicationUser pour inclure une propriété Roles. Toutefois, cela n’est plus pris en charge dans .NET Core. Toute tentative d'utilisation de cette implémentation entraînera une erreur lors de la tentative d'inclusion de rôles dans la requête.

Implémentation d'une table de relations personnalisée

Pour surmonter ce problème, une table de relations personnalisée est requise. Cette table connectera les tables ApplicationUser et IdentityRole, nous permettant de récupérer les utilisateurs et leurs rôles associés.

Les entités suivantes définissent cette relation :

  • ApplicationUser : Représente l'utilisateur de l'application.
  • ApplicationUserRole : relie les utilisateurs aux rôles.
  • ApplicationRole : représente l'application rôle.

Configuration du DbContext

L'ApplicationDbContext doit être mis à jour pour gérer ces entités et leurs relations :

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();
    }
}
Copier après la connexion

Chargement impatient dans la page Razor

Pour récupérer les utilisateurs et leurs rôles associés, le code suivant est ajouté au Razor Page :

public IActionResult OnGetAsync()
{
    this.Users = userManager.Users
        .Include(u => u.UserRoles)
        .ThenInclude(ur => ur.Role)
        .ToList();
    return Page();
}
Copier après la connexion

La partie ".Include(u => u.UserRoles)" charge avec impatience les UserRoles pour chaque utilisateur. La partie ".ThenInclude(ur => ur.Role)" charge en outre avec impatience le rôle de chaque UserRole. Cela garantit que les utilisateurs et leurs rôles sont disponibles dans le modèle.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal