Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Kembali Semua Pengguna dan Peranan Berkaitan Mereka dengan Cekap dalam Identiti .NET Core 2.1?

Bagaimana untuk Mendapatkan Kembali Semua Pengguna dan Peranan Berkaitan Mereka dengan Cekap dalam Identiti .NET Core 2.1?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 07:29:10464semak imbas

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

Cara Mendapatkan Semua Pengguna dengan Peranan Berkaitan dalam .NET Core 2.1 Identity

Melaksanakan operasi pangkalan data yang melibatkan pengurusan pengguna boleh menjadi rumit, seperti yang ditunjukkan oleh kesukaran yang dihadapi dalam mendapatkan semula semua pengguna Identiti dengan peranan mereka yang berkaitan.

Isu: Ralat Akses Perhubungan

Seperti yang diterangkan dalam konteks yang disediakan, ralat berlaku apabila cuba mengakses sifat Peranan setiap IdentityUser. Ralat ini disebabkan oleh perubahan pada entiti IdentityUser dalam .NET Core. Dalam versi terdahulu, IdentityUser pernah mempunyai sifat Peranan, tetapi ini tidak lagi berlaku.

Penyelesaian: Melaksanakan Entiti Tersuai

Untuk mengatasi isu ini, seseorang mesti mencipta entiti tersuai untuk mewakili peranan pengguna perhubungan.

Pengguna Aplikasi:

public class ApplicationUser : IdentityUser
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

Aplikasi Peranan Pengguna:

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

Peranan Aplikasi:

public class ApplicationRole : IdentityRole
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

DbContext Kemas kini:

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

Pengubahsuaian Permulaan:

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

Pendapatan Data:

Bersemangat memuatkan peranan dan peranan pengguna:

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

Dengan melaksanakan entiti tersuai ini dan mengemas kini konteks pangkalan data, anda boleh mendapatkan semula semua pengguna dan peranan mereka yang berkaitan dalam Identiti .NET Core 2.1.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Semua Pengguna dan Peranan Berkaitan Mereka dengan Cekap dalam Identiti .NET Core 2.1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn