как я уже писал в названии, у меня есть этот код:ASP.NET MVC-Как обновить пользовательские свойства ApplicationUser
public class ApplicationUser : IdentityUser
{
public virtual MapPosition MapPosition { get; set; }
public ApplicationUser()
{
MapPosition = new MapPosition { PositionX = 0, PositionY = 0 };
}
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 class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<MapPosition> MapPositions { get; set; }
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
И в моем контроллере у меня есть метод, который я называю от @ Ajax.ActionLink в моем взгляд:
public string ChangeXPosition()
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
// Get the current logged in User and look up the user in ASP.NET Identity
currentUser = manager.FindById(User.Identity.GetUserId());
currentUser.MapPosition.PositionX++;
//manager.Update(currentUser);
Debug.WriteLine("currentUser.MapPosition.PositionX: " + currentUser.MapPosition.PositionX);
return "currentUser.MapPosition.PositionX: " + currentUser.MapPosition.PositionX;
}
Я хочу сохранить в базу данных измененное значение currentUser.MapPosition.PositionX. Я нашел множество способов решить эту проблему, но ни один из них не работал с моим проектом.
Я попробовал эти решения:
how-to-update-identityuser-with-custom-properties-using-mvc5-and-entity-framewor
updating-user-data-asp-net-identity
mvc5-applicationuser-custom-properties
UPDATE Ok, так что я пытался сделать, как вы сказали, но по-прежнему не работает:
public class ApplicationUser : IdentityUser
{
public virtual MapPosition MapPosition { get; set; }
public ApplicationUser()
{
}
}
Эта версия работает, мой метод контроллера меняет значение в таблице. Но он работает только для пользователей, которые уже созданы. Когда я создаю нового пользователя, его новая запись MapPositions не создается.
public class ApplicationUser : IdentityUser
{
private MapPosition _mapPosition;
public virtual MapPosition MapPosition
{
get { return _mapPosition ?? (_mapPosition = new MapPosition()); }
}
public ApplicationUser()
{
}
}
Эта версия не работает вообще, не изменяет значения в базе данных и не создает запись в MapPositions, когда создается новый пользователь.
Просьба описать, какие подходы вы пытались и которые не работали для вашего дела. – Deilan