Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Ask Question
I have a problem and I tried to solve it a lot, which is when I want to modify the user data by the function
EditOrCreateInformation()
this error exception message appears:
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: 'Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded.
Screenshot of the error is display here
Controller code:
[HttpPost]
public IActionResult EditOrCreateInformation(ApplicationUserVm model, ApplicationUser user)
if (ModelState.IsValid)
var olddata = context.Users.Where(a => a.Id == user.Id).AsNoTracking().FirstOrDefault();
string oldfilename = olddata.PhotoUrl;
if (model.Photo == null)
model.PhotoUrl = oldfilename;
if (oldfilename != null)
if (model.Photo != null && System.IO.File.Exists(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "PhotoFiles/PhotoProfile", oldfilename)))
System.IO.File.Delete(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "PhotoFiles/PhotoProfile", oldfilename));
string PhysicalPath = Path.Combine(Directory.GetCurrentDirectory() + "/wwwroot", "PhotoFiles/PhotoProfile/");
// 2) Get File Name
string FileName = Guid.NewGuid() + Path.GetFileName(model.Photo.FileName);
// 3) Merge Physical Path + File Name
string FinalPath = Path.Combine(PhysicalPath, FileName);
// 4) Save The File As Streams "Data Over Time"
using(var stream = new FileStream(FinalPath, FileMode.Create))
model.Photo.CopyTo(stream);
model.PhotoUrl = FileName;
string PhysicalPath = Path.Combine(Directory.GetCurrentDirectory() + "/wwwroot", "PhotoFiles/PhotoProfile/");
// 2) Get File Name
string FileName = Guid.NewGuid() + Path.GetFileName(model.Photo.FileName);
// 3) Merge Physical Path + File Name
string FinalPath = Path.Combine(PhysicalPath, FileName);
// 4) Save The File As Streams "Data Over Time"
using(var stream = new FileStream(FinalPath, FileMode.Create))
model.Photo.CopyTo(stream);
model.PhotoUrl = FileName;
var obj = mapper.Map < ApplicationUser > (model);
applicationUser.Update(obj);
toastNotification.AddSuccessToastMessage("Your Information Updated successfully");
return RedirectToAction("MyProfile", "Profile", new
Area = "Identity"
return View(model);
Repository code:
public ApplicationUser Update(ApplicationUser obj)
db.Entry(obj).State = EntityState.Modified;
db.SaveChanges();
return db.Users.Where(a => a.Id == obj.Id).FirstOrDefault();
How can I fix this?
I will be very grateful to help me solve this problem.
–
–
using different DbContext
First, The AsNoTracking should be only used on read-only queries aka SELECT. If you need to UPDATE the same object, then you should select the object without using AsNoTracking.
Secondly, Update method you pass the modified User object to a different context that does not have the current object's change tracking history. So, when SaveChanges executed, it won't see any changes; because the object's changes were made in a different context.
so what you need to do is just remove AsNoTracking and replace these lines :
var obj = mapper.Map < ApplicationUser > (model);
applicationUser.Update(obj);
with this :
olddata.PhotoUrl = model.PhotoUrl;
context.Entry(olddata).State = EntityState.Modified;
db.SaveChanges();
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.