Mysql
 sql >> база данни >  >> RDS >> Mysql

.NET Core 2.1 Identity получава всички потребители с техните свързани роли

Сега приложих следното решение.

Както CodeNotFound посочи в коментарите, IdentityUser е имал Roles Имот. Това вече не е така в .NET Core. Този коментар/проблем на GitHub изглежда е текущото решение за .Net Core. Опитах се да го внедря със следния код:

ApplicationUser

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

ApplicationRole

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

Стартиране

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

И накрая, уверете се, че когато го използвате, нетърпеливо зареждате UserRoles на потребителя, а след това и ролята на UserRole така:

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

Имах проблем, при който Role свойство на всяка UserRole беше null и това беше разрешено чрез добавяне на .ThenInclude(ur => ur.Role) част.

Документ на Microsoft за нетърпеливо зареждане на няколко нива:https://docs.microsoft.com/en-us/ef/core/querying/related-data#including-multiple-levels

Актуализация на ASP Core 2.2

Присъщо от IdentityUserRole<Guid> not string. Може също да се наложи да премахнете кода в ModelBuilder, за да заработите миграциите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Фатална грешка:Извикване на член функция bind_param() на булева

  2. Mysql Преобразуване на колона в ред (Опорна таблица)

  3. Двоични данни в MySQL

  4. PyMySQL не може да се свърже с MySQL на localhost

  5. Как да използвате Coalesce в MySQL