OData PATCH对象数组

时间:2019-02-27 15:04:11

标签: arrays odata patch

我正在尝试为我们的OData API添加批量更新支持。我想传入一个包含要修补的对象数组的对象。这是一个使用单个API调用修补两个用户对象的JSON示例:

{
  "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”变量的内容时,所有属性均为null,包括从上述JSON示例传入的属性。由于也由于某种原因也没有传递Id,因此在上下文中永远找不到该对象,并且不会修补任何内容。

我在做什么错了?

0 个答案:

没有答案