如何更新用户数据 - ASP.NET身份?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我已经为该ApplicationUser课程添加了自定义字段

我还创建了一个表单,用户可以通过该表单输入/编辑字段。

但由于某种原因,我无法更新数据库中的字段。

[HttpPost]
[ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Manage(EditProfileViewModel model)
{
    if (ModelState.IsValid)
    {
        // Get the current application user
        var user = User.Identity.GetApplicationUser();

        // Update the details
        user.Name = new Name { First = model.FirstName, Last = model.LastName, Nickname = model.NickName };
        user.Birthday = model.Birthdate;

        // This is the part that doesn't work
        var result = await UserManager.UpdateAsync(user);

        // However, it always succeeds inspite of not updating the database
        if (!result.Succeeded)
        {
            AddErrors(result);
        }
    }

    return RedirectToAction("Manage");
}

有人可以指导我如何更新User数据库中的信息吗?

更新:如果我将所有字段包含在注册表单中,则所有值都将存储在Users数据库表的新记录的相应字段中。

我不知道要更改现有用户的字段(users表中的行)。UserManager.UpdateAsync(user)不起作用。

另外请注意,我的问题比EntityFramework更面向身份

提问于
用户回答回答于

好的......我花了数小时试图找出为什么userManager.updateAsync不坚持我们编辑的用户数据......直到我得出以下结论:

混淆来自于我们创建了UserManager这样一行:

var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext()));

...然后我们使用manager.UpdateAsync( user );它,但会更新上下文中的用户,然后我们需要保存对Identity的dbcontext的更改。所以,问题是如何以最简单的方式获得Identity DBContext。

为了解决这个问题,我们不应该UserManager在一行中创建...以下是我如何做到这一点:

var store = new UserStore<ApplicationUser>(new MyDbContext());
var manager = new UserManager(store);

然后,在更新用户之后,通过调用

manager.UpdateAsync(user);

然后,将进入上下文。

var ctx = store.context;

然后

ctx.saveChanges();
用户回答回答于

如果你留下任何的ApplicationUser或IdentityUser领域的更新会回来的成功,但不会保存在数据库中的数据。

示例解决方案

ApplicationUser model = UserManager.FindById(User.Identity.GetUserId())

添加新更新的字段:

model.Email = AppUserViewModel.Email;
model.FName = AppUserViewModel.FName;
model.LName = AppUserViewModel.LName;
model.DOB = AppUserViewModel.DOB;
model.Gender = AppUserViewModel.Gender;

调用UpdateAsync

IdentityResult result = await UserManager.UpdateAsync(Model);

我已经测试过这个了,它很有效。

扫码关注云+社区

领取腾讯云代金券