我正在尝试为我们的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,因此在上下文中永远找不到该对象,并且不会修补任何内容。
我在做什么错了?