Я пытаюсь установить значение столбца в таблице aspnetuser
с другого контроллера (не accountcontroller
). Я пытался получить доступ к UserManager
, но я не могу понять, как это сделать.Доступ к UserManager за пределами AccountController
До сих пор я попытался следующие в контроллере Я хочу использовать его в:
ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
u.IsRegComplete = true;
UserManager.Update(u);
Это не компилировать (я думаю, потому что UserManager
не был создан экземпляр контроллера)
I также попытался создать публичный метод в 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());
I проект выполнил (погорячился), но когда я побежал код я получаю следующее ошибка:
Additional information: The entity type ApplicationUser is not part of the model for the current context.
UPDATE 2:
у меня есть движение d функция к 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).
Похоже, что сообщение об ошибке, подобное «db», которое вы передаете в хранилище, - это не тот же DbContext, который содержит ваши таблицы Identity. – Iravanchi
Есть ли у вас 'public class ApplicationDbContext: IdentityDbContext {}' в вашем классе 'db' context? –
См. Обновленное сообщение выше - спасибо – Spionred