Heim > Datenbank > MySQL-Tutorial > Wie kann ich alle Benutzer und ihre zugehörigen Rollen in der .NET Core 2.1-Identität effizient abrufen?

Wie kann ich alle Benutzer und ihre zugehörigen Rollen in der .NET Core 2.1-Identität effizient abrufen?

Mary-Kate Olsen
Freigeben: 2024-12-02 07:29:10
Original
461 Leute haben es durchsucht

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

So rufen Sie alle Benutzer mit zugeordneten Rollen in der .NET Core 2.1-Identität ab

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.

Problem: Beziehungszugriff Fehler

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.

Lösung: Benutzerdefinierte Entitäten implementieren

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; }
}
Nach dem Login kopieren

ApplicationUserRole:

public class ApplicationUserRole : IdentityUserRole<string>
{
    public virtual ApplicationUser User { get; set; }
    public virtual ApplicationRole Role { get; set; }
}
Nach dem Login kopieren

ApplicationRole:

public class ApplicationRole : IdentityRole
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}
Nach dem Login kopieren

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();
        });
    }
}
Nach dem Login kopieren

Startänderung:

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
Nach dem Login kopieren

Datenabruf:

Laden Sie eifrig die Benutzerrollen und Rollen:

this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage