【发布时间】:2020-03-25 21:26:59
【问题描述】:
寻找一种使用 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 和单个列,如下所示:
{
"Id": 140225,
"UserText": "Test"
}
然后它只会更新那个单一的文本。但是正在发生的是传入的“记录”值包含类中每个对象的名称,设置为 null 或 0,然后使用这些值更新该行中的所有列。
一直在做一些研究,我知道我可以使用类似的东西:
var Record = await _context.Records.FindAsync(id);
Record.UserText = record.UserText;
_context.Entry(Record).Property("UserText").IsModified = true;
然后它只更新那一列。我似乎无法弄清楚如何利用我所提供的知识从 A 到 B。只是好奇是否有其他人遇到过这个问题或有一个很酷的解决方案。我目前的做法可能是遍历记录以寻找能够设置 IsModified 的值,但没有运气让它正常工作。
【问题讨论】:
标签: entity-framework ef-core-3.0