У меня есть приложение .NET Core 2.1, и я пытаюсь добавить пользователя в роли вручную.
Я не использую Role Manager, поскольку база данных, к которой я использую, также доступна из традиционного приложения ASP.NET MVC.
У меня есть следующий код для обновления пользователя:
public async Task<bool> Update(UserFormViewModel model)
{
var user = await GetUserById(model.Id);
_context.Entry(user).Property(x => x.Id).IsModified = false;
_context.Entry(user).CurrentValues.SetValues(model);
user.AspNetUserRoles.Clear();
await _context.SaveChangesAsync();
foreach (var role in model.Roles)
{
var aspnetuserrole = await _context.AspNetUserRoles.Where(x => x.RoleId == role).Include(x=>x.Role).Include(x=>x.User).FirstOrDefaultAsync();
user.AspNetUserRoles.Add(aspnetuserrole);
}
try
{
var result = await _context.SaveChangesAsync() > 0;
return result;
}
catch (Exception ex)
{
return false;
}
}
Этот код не работает с ошибкой:
"Свойство UserId типа объекта AspNetUserRole является частью
и т. д. не может быть изменено или помечено как измененное.
Это мои модели:
Это моя ViewModel, которая и отправляется:
public class UserFormViewModel
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string[] Roles { get; set; }
}
Это моя модель приложения пользователя:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<AspNetUserRole> AspNetUserRoles { get; set; }
}
public class AspNetUserRole
{
public string UserId { get; set; }
public ApplicationUser User {get; set;}
public string RoleId { get; set; }
public AspNetRole Role {get; set;}
}
public class AspNetRole
{
[Key]
public string Id { get; set; }
[MaxLength(256)]
[Required]
public string Name {get; set;}
public virtual ICollection<AspNetUserRole> AspNetUserRoles {get; set;}
}