Ищу способ обновления одного столбца в одной строке таблицы с помощью EF Core 3. Вот мой сценарий, который я ищу. Сегодня у меня есть класс, определенный следующим образом:
public partial class Records
{
public int Id { get; set; }
public int CustomerId { get; set; }
public int UserId { get; set; }
public string UserText { get; set; }
public DateTime? UserDate { get; set; }
public bool? NotificationSent { get; set; }
}
И у меня есть такая команда PUT:
[HttpPut("{customerId}/{id}")]
public async Task<IActionResult> PutRecords([FromHeader(Name = "Token")] string token, [FromHeader(Name = "Secret")] string secret, int id, Records record)
{
if (id != record.Id)
{
return BadRequest();
}
_context.Entry(record).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!RecordsExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return Ok("Success"); ;
}
Когда я отправляю свой клиент, я надеялся, что смогу просто отправить в идентификаторе и одном столбце, например:
{
"Id": 140225,
"UserText": "Test"
}
И тогда будет обновляться только этот единственный текст. Но происходит то, что передаваемое значение «запись» содержит имена каждого объекта в классе, значение которого равно нулю или 0, а затем обновляет все столбцы в этой строке этими значениями.
Я провел какое-то исследование, и я знаю, что могу использовать что-то вроде:
var Record = await _context.Records.FindAsync(id);
Record.UserText = record.UserText;
_context.Entry(Record).Property("UserText").IsModified = true;
, и тогда он обновляет только этот единственный столбец. Похоже, я не могу понять, как добраться от А до Б со знаниями, которые я изложил. Просто любопытно, сталкивался ли кто-нибудь еще с этим или имеет крутое решение. Возможно, я прошёл через запись oop, пытаясь найти значения, чтобы можно было установить IsModified, но мне не повезло, чтобы это работало правильно.