ユーザーとそのロールを管理する場合、両方を効率的に取得するメカニズムを備えていることが重要です。この記事では、Identity Framework を使用して .NET Core 2.1 でこのタスクを実行する方法について詳しく説明します。
一般的なアプローチの 1 つは、ApplicationUser クラスを変更して、Roles プロパティを含めることです。ただし、これは .NET Core ではサポートされなくなりました。この実装を使用しようとすると、クエリにロールを含めようとするとエラーが発生します。
この問題を解決するには、カスタム リレーションシップ テーブルが必要です。このテーブルは ApplicationUser テーブルと IdentityRole テーブルを接続し、ユーザーとその関連ロールを取得できるようにします。
次のエンティティはこの関係を定義します:
次のエンティティとその関係を処理するには、ApplicationDbContext を更新する必要があります。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string> { protected override void OnModelCreating(ModelBuilder builder) { // Define the relationship between ApplicationUser and ApplicationUserRole builder.Entity<ApplicationUserRole>() .HasKey(ur => new { ur.UserId, ur.RoleId }); builder.Entity<ApplicationUserRole>() .HasOne(ur => ur.User) .WithMany(u => u.UserRoles) .HasForeignKey(ur => ur.UserId) .IsRequired(); builder.Entity<ApplicationUserRole>() .HasOne(ur => ur.Role) .WithMany(r => r.UserRoles) .HasForeignKey(ur => ur.RoleId) .IsRequired(); } }
ユーザーとその関連ロールを取得するには、次のコードを追加します。 Razor ページへ:
public IActionResult OnGetAsync() { this.Users = userManager.Users .Include(u => u.UserRoles) .ThenInclude(ur => ur.Role) .ToList(); return Page(); }
「.Include(u => u.UserRoles)」部分は、各ユーザーの UserRoles を積極的に読み込みます。 「.ThenInclude(ur => ur.Role)」部分は、各 UserRole のロールをさらに積極的に読み込みます。これにより、ユーザーとそのロールの両方をモデル内で使用できるようになります。
以上が.NET Core 2.1 でユーザーとその関連ロールを効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。