Расширение функции Create для IdentityRoles - PullRequest
0 голосов
/ 03 сентября 2018

Я недавно расширил свою модель 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>;
...