Получить/изменить строки в AspNetUserRoles с помощью расширенного класса для IdentityUserRolesC#

Место общения программистов C#
Anonymous
Получить/изменить строки в AspNetUserRoles с помощью расширенного класса для IdentityUserRoles

Сообщение Anonymous »

В настоящее время я работаю над созданием функции, которая даст пользователям возможность переключаться между профилями. Чтобы реализовать это, я решил расширить IdentityUserRoles новым классом следующим образом:

Код: Выделить всё

public class ApplicationUserRole : IdentityUserRole
{
public virtual ApplicationUser User { get; set; }
public virtual ApplicationRole Role { get; set; }
public bool IsDefault { get; set; }
public bool IsActive { get; set; }
public bool IsDeactivated { get; set; }
}
Я создал/запустил миграцию EF без проблем и вижу новые столбцы в таблице AspNetUserRoles.
Я также расширил IdentityUser следующим образом :

Код: Выделить всё

public class ApplicationUser : IdentityUser
{
public IEnumerable Roles { get; set; }
public ICollection UserRoles { get; set; }
}
Следуя советам в этом вопросе StackOverflow, я настроил свой контекст следующим образом:

Код: Выделить всё

        modelBuilder.Entity()
.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.UsingEntity
(au => au.HasOne().WithMany(role => role.UserRoles).HasForeignKey(u => u.RoleId),
au => au.HasOne().WithMany(user => user.UserRoles).HasForeignKey(r => r.UserId))
.ToTable("AspNetUserRoles");

modelBuilder.Entity()
.HasOne(ur => ur.User)
.WithMany(u => u.UserRoles)
.HasForeignKey(ur => ur.UserId);

modelBuilder.Entity()
.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId);
Однако свойство UserRoles никогда не заполняется и остается нулевым. Я пробовал использовать следующее, когда пользователь проходит аутентификацию через userManager:

Код: Выделить всё

            var user = await userManager.FindByEmailAsync(username);
if (user != null && await userManager.CheckPasswordAsync(user, password))
{
await _context.Entry(user).Collection(x => x.UserRoles).LoadAsync();
return user;
}
Но это просто преобразует ApplicationUser.UserRoles в пустой массив. Как мне получить данные из таблицы AspNetUserRoles, а затем изменить добавленные столбцы?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -identityu

Вернуться в «C#»