[英]Concurrency failure while updating identity user in asp.net core
在我的項目中,我使用的是 ASP.Net Core 身份。 我有一個ApplicationUser
class ,它有一個Education
列表。
public class ApplicationUser: IdentityUser, IEntity
{
public ApplicationUser()
{
Educations = new List<Education>();
}
public string Name { get; set; }
public DateTime DateofBirth { get; set; }
public virtual List<Education> Educations { get; set; }
}
教育
public class Education:IEntity
{
[Key]
public Guid GUID { get; set; }
public string Institution { get; set; }
public string Degree { get; set; }
}
我想通過 UserManager 用教育列表更新用戶。
public async Task<IActionResult> UpdateProfile(UpdateModel model)
{
ApplicationUser user = await _userManager.GetUserAsync(User);
if (ModelState.IsValid)
{
user.Name = model.UserDetails.Name;
user.DateofBirth = model.UserDetails.DateofBirth;
user.Educations = model.UserDetails.Educations;
var userPassword = _userManager.PasswordHasher.VerifyHashedPassword(user,
user.PasswordHash, model.Password);
if (userPassword != PasswordVerificationResult.Success)
{
ModelState.AddModelError(string.Empty, "Invalid Password.");
return Json("/Profile/Update");
}
else
{
IdentityResult result = await _userManager.UpdateAsync(user);
}
}
return Json("/Profile/Index");
}
更新 Model
public class UpdateModel
{
public ApplicationUser UserDetails { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
更新時,如果我嘗試添加新的 Education object,則會出現並發故障。 但是已經存在的教育 object 可以正確更新。
更新時,如果我嘗試添加新的 Education object,則會出現並發故障。 但是已經存在的教育 object 可以正確更新。
你的意思是在同一個動作中創建和更新?
可以嘗試設置一個if else來判斷數據庫是否已經有用戶,然后創建或者編輯model,
喜歡:
public async Task<IActionResult> CreateOrUpdateProfile(UpdateModel model)
{
if (ModelState.IsValid)
{
if (_context.ApplicationUsers.Any(x => x.Id == model.UserDetails.Id)) //judge
{
//Create...
}
else
{
ApplicationUser user = await _userManager.GetUserAsync(User);
//Edit...
}
}
return Json("/Profile/Index");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.