Я использую 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. Заранее спасибо.
вы создали класс Role своего собственный также? –