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

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

Mary-Kate Olsen
Libérer: 2024-12-02 07:29:10
original
462 Les gens l'ont consulté

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

Comment récupérer tous les utilisateurs avec des rôles associés dans l'identité .NET Core 2.1

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.

Problème : accès relationnel Erreur

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.

Solution : Implémentation d'entités personnalisées

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

ApplicationUserRole :

public class ApplicationUserRole : IdentityUserRole<string>
{
    public virtual ApplicationUser User { get; set; }
    public virtual ApplicationRole Role { get; set; }
}
Copier après la connexion

ApplicationRole :

public class ApplicationRole : IdentityRole
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}
Copier après la connexion

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

Modification du démarrage :

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
Copier après la connexion

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

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!

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