2016-11-09 4 views
0

Я использую 4-слойную архитектуру для моего приложения MVC: Domain, Data, Service и MVC. В моем домене я создал класс Employee, наследующий от IdentityUser. Он содержит настраиваемые свойства и метод GenerateUserIdentityAsync, который я получил из класса пользователя приложения в идентификационных модах в MVC.Дополнительный столбец таблицы пользовательских ролей при использовании пользовательского идентификатора пользователя (ASP.NET 5.2EF 6 и Identity 2)

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. Я не упоминаю сотрудника в своих дебетах. Я также добавил много о моем приложении и особенно классе сотрудников.

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

    } 

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

Последнее изменение я сделал то, что я изменил файлы StartUp.Auth.cs и IdentityConfig, чтобы они соответствуют мой класс Employee и мой контекст.

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 колонки, как указано здесь:

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

+0

вы создали класс Role своего собственный также? –

ответ

0

Исправленного его с удалением типичности (Employee) из DbContext: IdentityDbContext Моего контекста теперь: класса MyCWCContexte общественности: IdentityDbContext

+0

Это ответ или дополнение к вопросу? –

+0

@GertArnold ответ – Amstelsus

Смежные вопросы