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
Mary-Kate Olsenoriginal
2024-12-02 07:29:10464parcourir

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; }
}

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!

Déclaration:
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