Данные теряются при обновлении базы данных в ASP.NET MVC

#c# #asp.net #asp.net-mvc #entity-framework

Вопрос:

У меня есть модель с 2 значениями ( PK) —

 public int Id { get; set; }
public string ImageDescription { get; set; }
public byte[] Image { get; set; }
 

Но когда пользователь обновляет поле описания изображения, изображение удаляется из базы данных.
Я использую автоматически сгенерированный контроллер для редактирования.

 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. Опубликуйте свой код обновления

Ответ №1:

у вас нет изображения в привязке, только описание изображения, поэтому вы не можете его сохранить.

 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();
 }
 

Комментарии:

1. Извините, что не уточнил лучше — я не собираюсь, чтобы пользователи меняли изображение, а только описание. Однако, когда они редактируют описание, изображение удаляется из базы данных

2. @aloneintallinn Да, он будет удален так, как вы делаете обновление

3. Я попробовал что-то подобное, но это вызывает у меня ту же проблему, что и в вашем коде: «Невозможно отследить экземпляр сущности типа»Галерея», поскольку другой экземпляр с тем же значением ключа для {‘Id’} уже отслеживается».

4. @aloneintallinn тебе не нужно пробовать ничего подобного. Просто используйте этот код как есть. Это никогда не подводит.