Я пытаюсь установить значение столбца в таблице aspnetuser
с другого контроллера (не accountcontroller
). Я пытался получить доступ к UserManager
, но я не могу понять, как это сделать.
До сих пор я пробовал следующее в контроллере, в котором я хочу использовать его:
ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
u.IsRegComplete = true;
UserManager.Update(u);
Это не скомпилируется (я думаю, потому что UserManager
не был создан экземпляр контроллера)
Я также попытался создать открытый метод в accountcontroller
, чтобы принять значение, которое я хочу изменить, и сделать его там, но я не могу понять, как его вызвать.
public void setIsRegComplete(Boolean setValue)
{
ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
u.IsRegComplete = setValue;
UserManager.Update(u);
return;
}
Как вы получаете доступ и редактируете данные пользователя за пределами Контроллера учетных записей?
UPDATE:
Я попытался создать экземпляр UserManager в другом контроллере следующим образом:
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
ApplicationUser u = userManager.FindById(User.Identity.GetUserId());
Я выполнил проект (немного взволнован), но когда я запустил код, я получил следующую ошибку:
Additional information: The entity type ApplicationUser is not part of the model for the current context.
ОБНОВЛЕНИЕ 2:
Я переместил эту функцию в IdentityModel (не спрашивайте, чтобы я сжимал здесь соломинку):
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> 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 Boolean IsRegComplete { get; set; }
public void SetIsRegComplete(string userId, Boolean valueToSet)
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());
ApplicationUser u = new ApplicationUser();
u = userManager.FindById(userId);
u.IsRegComplete = valueToSet;
return;
}
}
Однако я все еще получаю следующее:
The entity type ApplicationUser is not part of the model for the current context.
В IdentitiesModels.cs также есть следующий класс:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Что я здесь делаю неправильно? Похоже, я полностью лаем неправильное дерево. Все, что я пытаюсь сделать, это обновить столбец таблицы aspnetuser от действия другого контроллера (т.е. Не AccountsController).