Я понимаю, что такое асинхронное программирование, но мне трудно реализовать его в моем коде. Identity 2.1 генерирует методы CRUD, и я хочу добавить к нему код. Как я могу сохранить обновление LINQ? Мне нужно использовать ожидание? Таблица AspNetUsers обновляется нормально, но не моя таблица UserProfiles:
// POST: /Users/Edit/5 [Bind(Include = "FirstName,LastName,Email,Id,Address,City,State,PostalCode")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditUserViewModel editUser, params string[] selectedRole)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByIdAsync(editUser.Id);
if (user == null)
{
return HttpNotFound();
}
user.UserName = editUser.Email;
user.Email = editUser.Email;
user.Address = editUser.Address;
user.City = editUser.City;
user.State = editUser.State;
user.PostalCode = editUser.PostalCode;
var userRoles = await UserManager.GetRolesAsync(user.Id);
selectedRole = selectedRole ?? new string[] { };
var result = await UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray<string>());
if (!result.Succeeded)
{
ModelState.AddModelError("", result.Errors.First());
return View();
}
result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray<string>());
if (!result.Succeeded)
{
ModelState.AddModelError("", result.Errors.First());
return View();
}
//Update Firstname/Lastname
var dbEntry = db.UserProfiles.Single(x => x.UserId == editUser.Id);
dbEntry.FirstName = editUser.FirstName;
dbEntry.LastName = editUser.LastName;
db.SaveChanges();
return RedirectToAction("Index");
}
ModelState.AddModelError("", "Something failed.");
return View();
}
Поскольку мой пост был приостановлен, позвольте мне объяснить свой вопрос более подробно. Вар dbEntry не обновляется в db.SaveChanges (). Когда я просматриваю код, editUser.FirstName и editUser.LastName имеют значение.
У var dbEntry есть запись, которую нужно обновить. Опять же, db.SaveChanges () не сохраняет.
Я думаю, что происходит что-то с асинхронным программированием. Поскольку метод является общедоступным async Task Edit ()
вместо того:
общедоступный ActionResult Edit (). Обновление будет работать с общедоступным ActionResult Edit ().
Поскольку я не использую асинхронное программирование (которое я изучаю), как мне реализовать ожидание в этом методе, чтобы var dbEntry обновлялся?