Как я могу расширить свой объект роли в ASP.NET Core Identity? - PullRequest
0 голосов
/ 22 января 2019

Ciao,

Я работаю в проекте .NET Core 2.2 с IdentityServer и ASP.NET Identity.

У меня есть следующие объекты:

Таблица ExtraDatas

+----+-------------+
| Id | Description |
+----+-------------+
| 1  | A           |
| 2  | B           |
| 3  | C           |
+----+-------------+

AspNetRoles

+----+-------+----------------+------------------+
| Id | Name  | NormalizedName | ConcurrencyStamp |
+----+-------+----------------+------------------+
|  1 | Admin | Admin          | [NULL]           |
|  2 | User  | User           | [NULL]           |
+----+-------+----------------+------------------+

RoleExtraDatas

+-------------+-----------------+
| RoleId (FK) | ExtraDataId (FK)|
+-------------+-----------------+
|           1 |               1 |
|           1 |               3 |
|           2 |               2 |
+-------------+-----------------+

Представляется следующими классами:

public class ExtraData
{
    [Key, Required]
    public int Id { get; set; }

    [Required, MaxLength(128)]
    public string Description { get; set; }

    public virtual ICollection<RoleExtraData> ExtraDatas { get; set; }
}

public class ApplicationRole: IdentityRole
{
    public virtual ICollection<RoleExtraData> ExtraDatas { get; set; }
}

public class RoleExtraData
{
    public string RoleId { get; set; }
    public ApplicationRole Role { get; set; }
    public int ExtraDataId { get; set; }
    public ExtraData ExtraDatas { get; set; }
}

Внутри моего Startup.cs Я настроил удостоверение ASP.NET, передавая ссылку на мой ApplicationRole класс:

services.AddIdentity<IdentityUser, ApplicationRole>()
    .AddEntityFrameworkStores<MyIdentityDbContext>()
    .AddDefaultTokenProviders();

Внутри моего сервиса с внедрением зависимостей я получаю свойства UserManager и RoleManager , но когда я пытаюсь выполнить этот код, role.ExtraDatas пусто:

IdentityUser user = userManager.GetUserAsync(context.Subject).Result;
Task<IList<string>> roleList = userManager.GetRolesAsync(user);

foreach (var roleId  in roleList.Result)
{
    ApplicationRole role = roleManager.FindByNameAsync(roleId).Result;

    // the property role.ExtraDatas is empty
}

Как я могу решить эту проблему?

Большое спасибо

...