ユーザー管理を伴うデータベース操作の実行は、取得時に発生する困難に代表されるように、複雑になる場合があります。すべてのユーザーとその関連ロールを識別します。
提供されたコンテキストで説明されているように、各 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; } }
アプリケーションロール:
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 ID ですべてのユーザーとその関連ロールを効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。