OData PATCH массив объектов - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь добавить поддержку массовых обновлений для нашего 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 выше.Поскольку идентификатор также не передается по какой-либо причине, объект никогда не обнаруживается в контексте и ничего не исправляется.

Что я делаю не так?

...