在 ASP.NET MVC 中更新数据库时数据丢失
Posted
技术标签:
【中文标题】在 ASP.NET MVC 中更新数据库时数据丢失【英文标题】:Data being lost when updating database in ASP.NET MVC 【发布时间】:2021-12-10 08:09:55 【问题描述】:我的模型有 2 个值 (+ PK) -
public int Id get; set;
public string ImageDescription get; set;
public byte[] Image get; set;
但是当用户更新 ImageDescription 字段时,图像会从数据库中删除。 我正在使用自动生成的控制器进行编辑。
public async Task<IActionResult> Edit(int id, [Bind("Id,ImageDescription")] Gallery gallery)
if (id != gallery.Id)
return NotFound();
if (ModelState.IsValid)
try
_context.Update(gallery);
await _context.SaveChangesAsync();
catch (DbUpdateConcurrencyException)
if (!GalleryExists(gallery.Id))
return NotFound();
else
throw;
return RedirectToAction(nameof(Index));
return View(gallery);
【问题讨论】:
发布您的更新代码 【参考方案1】:Bind中没有Image,只有ImageDescription,所以不能保存。
public async Task<IActionResult> Edit(int id, [Bind("Id,ImageDescription")] Gallery gallery)
如果您不想保存新图像并想保留之前的图像,则可以使用此代码
var existedGallery=_context.Set<Gallery>().FirstOrDefault(i=> i.Id==gallery.Id);
if(existedGallery!=null)
existedGallery.ImageDescription=gallery.ImageDescription;
_context.Entry(existedGallery).Property(i => i.ImageDescription).IsModified = true;
var result = await _context.SaveChangesAsync();
【讨论】:
很抱歉没有更好地澄清 - 我不打算让用户更改图像,而只是描述。但是,当他们编辑描述时,图像会从数据库中删除 @aloneintallinn 是的,它会按照你更新的方式被删除 我尝试了类似的方法,但它给了我与您的代码相同的问题:“无法跟踪实体类型'Gallery'的实例,因为另一个具有相同键值的实例 'Id ' 已被跟踪。” @aloneintallinn 你不需要尝试任何类似的东西。只需按原样使用此代码。它永远不会失败。以上是关于在 ASP.NET MVC 中更新数据库时数据丢失的主要内容,如果未能解决你的问题,请参考以下文章