У меня есть приложение ASP. NET Core WebAPI с Entity Framework Core.
У меня есть следующий класс модели:
public class Item
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Required(ErrorMessage = "You must provide a name.")]
[MaxLength(255)]
public string Name { get; set; }
}
и скаффолд «Контроллер API с действия с использованием Entity Framework ", который имеет следующий метод:
[HttpPut("{id}")]
public async Task<IActionResult> PutItem(long id, Item item)
{
if (id != item.Id)
{
return BadRequest();
}
_context.Entry(item).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
Я не понимаю проверку if (id != item.Id)
. Для свойства Id
установлено значение DatabaseGenerated
, потому что я хочу, чтобы он был моим первичным ключом, с автоинкрементом и НЕ предоставлялся клиентом, чтобы клиент мог просто ПОСТАВИТЬ объект {"name":"item1"}
и добиться успеха.
Так почему там эта проверка? Это ошибка автогенератора кода? Могу ли я безопасно удалить его?
Более того, если идентификатор не был сгенерирован в базе данных, должна ли эта проверка гарантировать, что пользователь передает объект с тем же идентификатором, что и тот, который он пытается обновить?