Запрос на отправку в API устанавливает значения в NULL

#asp.net-core #entity-framework-core #asp.net-core-webapi #asp.net-core-3.1

#asp.net-core #entity-framework-core #asp.net-core-webapi #asp.net-core-3.1

Вопрос:

У меня есть это.Ниже находится контроллер Net Core API, который выполняет запрос PUT.

Таблица, затронутая в Sql Server, выглядит следующим образом:

 carID  (varchar(15), NULL)
optionID (varchar(15), NOT NULL)
optionDescription (varchar(255), NULL)
optionType (varchar(50), NULL)
factoryID (varchar(15), NULL)
  

При тестировании я отправляю свойства, которые я хочу изменить, таким образом, в моем вызове API PUT:

 {
    " optionID": "633fr",
    "optionDescription": "Full Tech Package A"
}
  

Он обновляет запись в базе данных, но также устанавливает все значения, не отправленные в вызове PUT, в NULL. Поэтому, хотя он обновляет optionDescription, он устанавливает все остальные значения в NULL, кроме optionID.

Как мне запретить ему устанавливать другие значения?

Спасибо!

Вот контроллер:

     // PUT: api/CarOptions/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutCarOptions(Guid id, CarOptions carOptions)
    {
        if (id != carOptions.OptionId)
        {
            return BadRequest();
        }

        _context.Entry(carOptions).State = EntityState.Modified;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!CarOptionsExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return NoContent();
    }
  

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

1. Получить запись из базы данных, изменить только те поля, которые вы хотите, сохранить в базе данных?

Ответ №1:

Согласно вашему описанию, я предлагаю вам сначала попытаться присоединить модель, а затем установить для конкретного свойства IsModified значение true.

Это обновит только определенные поля вместо обновления всей модели.

Более подробную информацию вы можете найти в приведенном ниже примере:

     // PUT: api/CarOptions/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutCarOptions(Guid id, CarOptions carOptions)
    {
        _context.Documents.Attach(carOptions);
        _context.Entry(carOptions).Property(x => x.optionDescription).IsModified = true;
        _context.SaveChanges();


        return NoContent();
    }