Asp.net Identity 2.0更新用户

BCa*_*son 23 asp.net asp.net-identity

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

这是我发现的最接近的事情:

更新用户数据 - Asp.net身份

我没有成功合并默认模板.我本周刚刚开始使用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);
Run Code Online (Sandbox Code Playgroud)

我的UserManager是这样创建的:

return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

BCa*_*son 45

我遇到的问题是我创建了一个ApplicationUser并将对象保存到数据库中.由于Identity使用Entity Framework,因此添加了"updatedUser"对象的实体状态.因此实体框架试图插入到Identity数据库中,从而导致冲突.因此,您必须获取用户并更新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);
Run Code Online (Sandbox Code Playgroud)

  • 经过近3天的努力弄清楚我的用户为什么不会更新,我偶然发现了许多答案和方法.你的我的朋友总是有意义,并且让我更加悲伤......为了这个我的朋友,你赢得了互联网! (3认同)
  • 嗨,我做了同样的事情,仍然得到同样的错误.任何的想法 ? (2认同)