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.