当前位置: 首页 > 知识库问答 >
问题:

Asp。net Identity 2.0更新用户

扶开诚
2023-03-14

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

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

正在更新用户数据-Asp。网络标识

我还没有成功地合并默认模板。本周我刚开始使用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”类型的实体失败,因为相同类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“Add”方法或“Added”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“Unchanged”或“Modified”

谢啦

共有2个答案

司空元凯
2023-03-14

您还可以使用AuthContext并将状态更新为EntityState。修改。下面是一个示例。这将允许您只对数据库进行一次调用,而不是两次。

<代码>AuthContext AuthContext=新建AuthContext();authContext。条目(UpdateUser)。状态=实体状态。已修改

秦禄
2023-03-14

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

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);
 类似资料:
  • 问题内容: 我想从索引视图调用以下ajax.beginform后显示成功消息 这是我的结果div 而我的控制器是 但是,当我尝试此操作时,它将转到另一个视图InforMessage它不会更新结果div。没有Informessage存在。仍然会打开一个新页面,并显示消息“感谢您添加空缺”。如何解决此问题? 问题答案: 如果您重定向到另一个页面是因为您没有加载正确的脚本(或重复的脚本或它们的顺序错误)

  • Active Server Pages 在功能方面有所增强,更易于开发应用程序。 Microsoft 脚本调试程序。 您可以使用脚本调试程序调试 .asp 文件。请参阅调试 ASP 脚本。 事务性脚本。 ASP 页和页中使用的对象可以运行于事务环境之下。在页上的全部工作只有两种结果:提交或终止。事务可以保护应用程序免于因失败而导致数据丢失。请参阅创建事务性脚本。 管理工具。 许多应用程序设置可在

  • 编辑用户信息的方法和创建新用户差不多(参见第 7 章),创建新用户的页面在 new 动作中处理,而编辑用户的页面在 edit 动作中处理;创建用户的过程在 create 动作中处理 POST 请求,编辑用户要在 update 动作中处理 PATCH 请求(旁注 3.2)。二者之间最大的区别是,任何人都可以注册,但只有当前用户才能更新自己的信息。我们可以使用第 8 章实现的认证机制,通过“事前过滤器

  • Home Assistant 的更新方式根据安装环境的不同而有所差别。 通用方法 进入安装环境后输入指令: pip3 install --upgrade homeassistant 指定版本 pip3 install homeassistant==X.XX.X 开发版本 pip3 install --upgrade git+git://github.com/home-assistant/hom

  • 问题内容: 使用Hibernate,我想根据条件更新数据库中的数据,但是出现以下错误:“遍历的节点不能为空” 这是我的数据库描述: 这是我的JPA: 我究竟做错了什么?如果我将LEFT JOIN移到SET之前: 我得到:“正在期待SET,找到了LEFT” 如果我删除联接: 我得到:“非法尝试取消对集合的引用”。 更新值的正确方法是什么? 谢谢你的帮助! 问题答案: 第4章中的JPA 2.0规范包含

  • 问题内容: 需要“配合”用。我正在尝试使用游标,但出现错误: 代码: 如何正确做? 更新1 没有光标时,我这样做: 我得到了唯一的错误。因此,需要从头开始而不是从头开始更新。 更新2 桌子: 需要更新(增加)字段“顺序”。“序列”具有“索引”类型,因此无法完成: 当行中的“序列”增加1时,我收到一条错误,指出已存在另一行。 问题答案: 和 至于所提问题的标题:SQL命令中没有。Postgres以任