Дополнительный столбец в таблице роли пользователя при использовании пользовательского удостоверения пользователь(ASP.NET 5.2 EF 6 и Identity 2)

Я использую 4-х уровневую архитектуру для моего приложения MVC: домен,данные, сервис и MVC.
На уровне домена я создал класс Employee, наследуемый от IdentityUser. Он содержит пользовательские свойства и метод GenerateUserIdentityAsync, который я получил от класса пользователя приложения в identitymodes в MVC.

public class Employee : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<Employee> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
    public String CIN { get; set; }
    public String FirstName { get; set; }

В слое данных я создал контекст, наследуемый от IdentityDbContext . Я не упоминаю сотрудника в моих dbsets. Я также добавил множество относительно моего приложения и особенно класса сотрудника.

public class MyCWCContexte : IdentityDbContext<Employee>
{
    public MyCWCContexte()
        : base("name=CWCDB")
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

Последнее изменение, которое я сделал, это то, что я изменил запуск.Автор.cs и IdentityConfig файлы, чтобы они соответствовали моему классу сотрудника и моему контексту.

 public class ApplicationUserManager : UserManager<CWC.Domain.Entities.Employee>
{
    public ApplicationUserManager(IUserStore<CWC.Domain.Entities.Employee> store)
        : base(store)
    {
    }

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore<CWC.Domain.Entities.Employee>(context.Get<MyCWCContexte>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<CWC.Domain.Entities.Employee>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

Создание базы данных из миграций идет хорошо, Проблема с aspnet автоматически генерируемых таблиц, из IdentityUserRole класса, например. При попытке добавить пользователя и добавить роль к нему, я видел, что aspnetuserroles содержит 3 столбца, как указано здесь :

Скриншот select * из aspnetuserroles
UserId и RoleId являются PKs таблицы, а Employeee_id-FK от Employee. Я думаю, что UserId должен быть Fk вместо этого.
Это действительно проблема, так как авторизация аннотаций и GetRoles из usermanager, например, не работают хорошо. UserManager.GetRoles (Employee.Id) всегда возвращает null и Employee.Id I get имеет правильное значение, которое я получил из базы данных.
Я думаю, это потому, что сравнение производится на employee_id вместо userid.
У вас есть идея по этому поводу ?Я новичок в ASP.NET. Заранее спасибо.

1 ответ

  1. Исправлено путем удаления универсальности (Employee) из DbContext: IdentityDbContext
    Мой контекст сейчас :
    открытый класс MyCWCContexte : IdentityDbContext