ホームページ >データベース >mysql チュートリアル >.NET Core 2.1 ID ですべてのユーザーとその関連ロールを効率的に取得する方法

.NET Core 2.1 ID ですべてのユーザーとその関連ロールを効率的に取得する方法

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 ID で関連付けられたロールを持つすべてのユーザーを取得する方法

ユーザー管理を伴うデータベース操作の実行は、取得時に発生する困難に代表されるように、複雑になる場合があります。すべてのユーザーとその関連ロールを識別します。

問題: 関係アクセスエラー

提供されたコンテキストで説明されているように、各 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。