【发布时间】:2017-01-25 11:34:57
【问题描述】:
我在MVC 5 项目中使用ASP.NET Identity 2,我想使用UserManager.Update() 方法更新Student 数据。但是,由于我继承自 ApplicationUser 类,我需要在调用更新方法之前将 Student 映射到 ApplicationUser。另一方面,当使用我也用于创建新学生的方法时,由于并发性而出现错误,因为我创建了一个新实例而不是更新。由于我厌倦了使用AutoMapper 解决问题,所以我需要一个稳定的修复程序来解决没有AutoMapper 的问题。你能澄清一下如何解决这个问题吗?我将StudentViewModel 传递给Controller 中的Update 方法,然后我需要将其映射到Student,然后将它们作为ApplicationUser 传递给UserManager.Update() 方法。另一方面,我想知道是否应该在 Controller 阶段检索并发送密码,而不是出于安全考虑将密码传递给 View?您能否也告诉我这个问题(在用户更新期间,我不更新密码,我必须将用户的密码保存在数据库中)。任何帮助将不胜感激。
实体类:
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin,
ApplicationUserRole, ApplicationUserClaim>, IUser<int>
{
public string Name { get; set; }
public string Surname { get; set; }
//code omitted for brevity
}
public class Student: ApplicationUser
{
public int? Number { get; set; }
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Update([Bind(Exclude = null)] StudentViewModel model)
{
if (ModelState.IsValid)
{
ApplicationUser user = UserManager.FindById(model.Id);
user = new Student
{
Name = model.Name,
Surname = model.Surname,
UserName = model.UserName,
Email = model.Email,
PhoneNumber = model.PhoneNumber,
Number = model.Number, //custom property
PasswordHash = checkUser.PasswordHash
};
UserManager.Update(user);
}
}
【问题讨论】:
-
您是否使用自定义表学生并使用微软身份在学生表中插入数据??
-
不,我只使用同一张表 (AspNetUsers),而我的 Student 实体继承自 ApplicationUser。有比答案更聪明的解决方案吗?
-
其实我在这个场景中挣扎:stackoverflow.com/questions/39304464/…
标签: c# asp.net-mvc asp.net-identity automapper asp.net-identity-2