在 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 中更新数据库时数据丢失的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP .Net Core MVC 中启动时执行数据库更新

Asp.net MVC 用户管理器更新

Asp.Net MVC 2中会话超时时的确认

ASP.NET MVC - 将数据发布到 Facebook

ASP.NET MVC 敲除绑定不起作用

C# ASP.NET MVC:动态更新视图