.NET Core 2.1 Identity ユーザーと関連ロールの取得
.NET Core Identity では、ユーザーとその関連ロールの取得が困難な場合があります。 Identity の以前のバージョンでは、ApplicationUser 内に組み込みの Rolles プロパティが提供されていましたが、この機能は現在存在しません。
解決策
この問題に対処するには、次のコードを実装します。解決策:
ApplicationUser
public class ApplicationUser : IdentityUser { public ICollection<ApplicationUserRole> UserRoles { get; set; } }
ApplicationUserRol e
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; } }
ApplicationDbContext (関係の追加、シードの構成)
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>, ApplicationUserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>> { public DbSet<ApplicationUserRole> UserRoles { get; set; } // migrations omitted for brevity }
スタートアップ
services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128) .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
Razor ページ コード (関連データの早期ロード)
this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();
ASP コア2.2 更新
ASP Core 2.2 以降の場合、IdentityUserRole
提案された解決策に従おうとしましたが、次のエラーが発生しました: 「フィールドに不明な列 'u.Roles.ApplicationUserId'」リスト''。これを解決するために、GitHub のコメント/問題を調査し、上記で概説した解決策を実装しました。主な変更には、新しい ApplicationUserRole クラスと ApplicationRole クラスの作成、新しい関係を反映するための ApplicationUser クラスの更新、DbContext のモデル ビルダーへのカスタム構成の追加が含まれます。ユーザーの UserRoles を読み込み、次に UserRole のロールを読み込み、ユーザーとその関連ロールを正常に取得することができました。
以上が.NET Core 2.1 ID ユーザーとその関連ロールを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。