首頁 >資料庫 >mysql教程 >如何有效率地檢索.NET Core 2.1 Identity中的所有使用者及其關聯角色?

如何有效率地檢索.NET Core 2.1 Identity中的所有使用者及其關聯角色?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-02 07:29:10464瀏覽

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

如何檢索.NET Core 2.1 Identity 中具有關聯角色的所有使用者

執行涉及使用者管理的資料庫操作可能很複雜,例如檢索時遇到的困難所有身份使用者及其關聯角色。

問題:關係存取錯誤

如所提供的上下文所述,嘗試存取每個 IdentityUser 的 Roles 屬性時會發生錯誤。此錯誤是由 .NET Core 中的 IdentityUser 實體變更所引起的。在早期版本中,IdentityUser 曾經具有 Roles 屬性,但現在情況已不再如此。

解決方案:實作自訂實體

要解決此問題,必須建立自訂實體來表示使用者角色關係。

應用程式使用者:

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

應用程式使用者角色:

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更新:

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

啟動修改:

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

資料擷取:

立即載入使用者角色和角色:

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

透過實作這些自訂實體並更新資料庫上下文,您可以檢索.NET Core 2.1 Identity 中的所有使用者及其關聯角色。

以上是如何有效率地檢索.NET Core 2.1 Identity中的所有使用者及其關聯角色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn