Próbuję ustawić wartość kolumny w tabeli aspnetuser
z innego kontrolera (nie accountcontroller
). Próbowałem uzyskać dostęp do UserManager
, ale nie mogę wymyślić, jak to zrobić.Dostęp do UserManager poza AccountController
Dotychczas Próbowałem następujących w kontrolerze chcę go używać w:
ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
u.IsRegComplete = true;
UserManager.Update(u);
Nie byłoby skompilować (myślę ponieważ UserManager
nie została instancja kontrolera)
również próbowałem utworzyć publiczną metodę w AccountController
, aby zaakceptować wartość, na którą chcę zmienić wartość i zrobić to, ale nie mogę wymyślić, jak ją nazwać.
public void setIsRegComplete(Boolean setValue)
{
ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
u.IsRegComplete = setValue;
UserManager.Update(u);
return;
}
W jaki sposób uzyskujesz dostęp i edytujesz dane użytkownika poza kontem kontrolera?
UPDATE:
Próbowałem instancję UserManager w drugim kontrolerze tak:
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
ApplicationUser u = userManager.FindById(User.Identity.GetUserId());
I projekt przestrzegane (got trochę podniecony), ale kiedy wpadłem kod pojawia się następujący błąd:
Additional information: The entity type ApplicationUser is not part of the model for the current context.
UPDATE 2:
mam ruch d funkcja do IdentityModel (nie pytajcie mnie chwytając się brzytwy tutaj) tak:
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;
}
}
Jednak ja wciąż otrzymuję następujący:
The entity type ApplicationUser is not part of the model for the current context.
Istnieje także następujące klasy w IdentitiesModels.cs:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Co ja tu robię źle? Wydaje mi się, że zupełnie szczerzę złe drzewo. Wszystko, co próbuję zrobić, to zaktualizować kolumnę w tabeli aspnetuser z działania innego kontrolera (tj. Nie jest to AccountsController).
Wygląda na to, że komunikat o błędzie, taki jak "db", który przechodzisz do sklepu, nie jest tym samym DbContext, który zawiera tabele tożsamości. – Iravanchi
Czy masz "public klasy ApplicationDbContext: IdentityDbContext {}' w klasie kontekstowej 'db'? –
Zobacz zaktualizowany wpis powyżej - dzięki – Spionred