【问题标题】:Data being lost when updating database in ASP.NET MVC在 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);
        }

【问题讨论】:

  • 发布您的更新代码

标签: c# asp.net asp.net-mvc entity-framework


【解决方案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 你不需要尝试任何类似的东西。只需按原样使用此代码。它永远不会失败。
猜你喜欢
  • 2018-05-05
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2020-10-01
  • 1970-01-01
  • 2018-03-16
  • 2012-05-05
相关资源
最近更新 更多