Я пытаюсь добавить поддержку массовых обновлений для нашего OData API.Я хотел бы передать объект, который содержит массив объектов для исправления.Вот пример JSON исправления двух пользовательских объектов одним вызовом API:
{
"value": [
{
"id": 1,
"lastName": "Gilchrist2"
},
{
"id": 2,
"firstName": "Paul2"
}
]
}
Нам нужна эта возможность, потому что мы можем обновлять тысячи записей одновременно.Вот действие PATCH в контроллере:
public async Task<IActionResult> Patch([FromBody] DeltaUserList deltaUserList) {
var deltaUsers = deltaUserList.value;
User[] dbUsers = new User[0];
foreach (Delta<User> userDelta in deltaUsers) {
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
var instance = userDelta.GetInstance();
var dbUser = _db.Users.Find(instance.Id);
if (dbUser == null) {
return NotFound();
}
_db.Entry(dbUser).State = EntityState.Detached;
userDelta.Patch(dbUser);
dbUsers.Append(dbUser);
}
await _db.SaveChangesAsync();
return Ok(dbUsers);
}
При отладке ошибок нет, и в свойстве value есть 2 объекта, но при просмотре содержимого переменной instance всесвойства являются нулевыми, включая те, которые были переданы из примера JSON выше.Поскольку идентификатор также не передается по какой-либо причине, объект никогда не обнаруживается в контексте и ничего не исправляется.
Что я делаю не так?