Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

.NET Core 2.1 Identity mendapatkan semua pengguna dengan peran terkaitnya

Saya sekarang telah menerapkan solusi berikut.

Seperti yang ditunjukkan CodeNotFound dalam komentar, IdentityUser dulu memiliki Roles Properti. Ini tidak lagi terjadi di .NET Core. komentar/masalah ini di GitHub tampaknya menjadi solusi saat ini untuk .Net Core. Saya telah mencoba menerapkannya dengan kode berikut:

Pengguna Aplikasi

public class ApplicationUser : IdentityUser
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

ApplicationUserRole

public class ApplicationUserRole : IdentityUserRole<string>
{
    public virtual ApplicationUser User { get; set; }
    public virtual ApplicationRole Role { get; set; }
}

Peran Aplikasi

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>>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    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();
        });
    }
}

Mulai

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

Terakhir, pastikan saat Anda menggunakannya bahwa Anda dengan penuh semangat memuat UserRoles Pengguna, dan kemudian Peran UserRole seperti:

this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();

Saya memiliki masalah di mana Roles properti dari setiap UserRole adalah nol dan ini diselesaikan dengan menambahkan .ThenInclude(ur => ur.Role) bagian.

Dokumen Microsoft tentang pemuatan bersemangat multi-level:https://docs.microsoft.com/en-us/ef/core/querying/related-data#termasuk-multiple-level

Pembaruan ASP Core 2.2

Inheren dari IdentityUserRole<Guid> bukan stringAnda mungkin juga perlu menghapus kode di ModelBuilder agar migrasi berfungsi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Terbaik untuk Meng-host MySQL di Azure Cloud

  2. Perbedaan MySql antara dua cap waktu dalam beberapa hari?

  3. Mytop – Alat yang Berguna untuk Memantau Kinerja MySQL/MariaDB di Linux

  4. Mencegah serangan injeksi SQL dalam program Java

  5. Buat database MySQL dari Java