Я недавно расширил свою модель AspNetRoles, добавив в нее дополнительное поле ApplicationId. Намерение состоит в том, чтобы я мог использовать те же имена ролей, но иметь разные ApplicationId.
public class AspApplicationRoles : IdentityRole
{
public AspApplicationRoles() : base() { }
public AspApplicationRoles(String Name) : base(Name) { }
[Required]
public String ApplicationId { get; set; }
public AspNetApplications Application { get; set; }
}
Я также добавил функцию OnModelCreating в своей области IdentityConfig, которая отключила уникальный ключ в поле Имя.
Затем я также обновил валидатор следующим образом:
public class ApplicationRoleValidator<TRole> : RoleValidator<TRole> where TRole : AspApplicationRoles
{
private RoleManager<TRole, string> Manager { get; set; }
private AspApplicationRoles data = new AspApplicationRoles();
private ApplicationDbContext dbContext = new ApplicationDbContext();
public ApplicationRoleValidator(RoleManager<TRole, string> manager) : base(manager)
{
Manager = manager;
}
public override async Task<IdentityResult> ValidateAsync(TRole Input)
{
data = dbContext.AspApplicationRoles.Where(ar => ar.ApplicationId == Input.ApplicationId && ar.Name == Input.Name).SingleOrDefault();
if (data == null)
{
return IdentityResult.Success;
}
else
{
return IdentityResult.Failed("Role already exists");
}
}
}
}
Однако, когда я отлаживаю и запускаю эту строку: var res = manager.Create(role);
Возвращает res.Succeeded, но не добавляет имя роли в мою таблицу.
Есть ли способ расширить или изменить функцию создания?
EDIT:
Это Создать часть из идентичности
//
// Summary:
// Create a role
//
// Parameters:
// manager:
//
// role:
public static IdentityResult Create<TRole, TKey>(this RoleManager<TRole, TKey> manager, TRole role)
where TRole : class, IRole<TKey>
where TKey : IEquatable<TKey>;