gpt4 book ai didi

Asp.net Identity 2.0更新用户

转载 作者:行者123 更新时间:2023-12-02 09:53:04 26 4
gpt4 key购买 nike

将用户更改保存到数据库时遇到问题,例如更改人员的姓名。我使用的是在新的 VS2013 Web 项目中使用个人身份验证自动创建的 IdentityModel。遗憾的是,除了更改角色之外,该模板不允许您更改任何用户信息。我通过谷歌环顾四周,没有发现太多。有人使用基本身份代码实现更新吗?

这是我发现的最接近的东西:

Updating user data - Asp.net Identity

我没有成功地合并默认模板。我本周刚刚开始使用 Identity,所以问题可能在于我缺乏理解。

var updatedUser = new ApplicationUser
{
Id = model.UserId,
UserName = model.UserName,
CustomerId = model.CustomerId,
Email = model.EmailAddress,
FirstName = model.FirstName,
LastName = model.LastName,
PhoneNumber = model.PhoneNumber,
};

...
var result = await UserManager.UpdateAsync(updatedUser);

我的 UserManager 是这样创建的:

return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

我在浏览器中收到以下错误:

附加“ApplicationUser”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图表中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”

谢谢

最佳答案

我遇到的问题是我创建了一个 ApplicationUser 并将对象保存到数据库中。由于 Identity 在幕后使用 Entity Framework ,因此添加了“updatedUser”对象的实体状态。因此 Entity Framework 尝试插入到身份数据库,导致冲突。因此,您必须获取用户并更新 Entity Framework 返回的用户对象,才能知道实体状态已修改。这是工作代码:

var user = await UserManager.FindByIdAsync(model.UserId);

user.Email = model.EmailAddress;
user.CustomerId = model.CustomerId;
user.FirstName = model.FirstName;
user.PhoneNumber = model.PhoneNumber;
user.LastName = model.LastName;

var result = await UserManager.UpdateAsync(user);

关于Asp.net Identity 2.0更新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com