執行涉及使用者管理的資料庫操作可能很複雜,例如檢索時遇到的困難所有身份使用者及其關聯角色。
如所提供的上下文所述,嘗試存取每個 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中文網其他相關文章!