Я пытаюсь установить дельта-патч Odata, однако сталкиваюсь с проблемами, которые соответствуют документации здесь о сложных объектах .Таким образом, дельта для Patch не может обрабатывать сложные объекты без установки недопустимого состояния модели.
Вот мой вызов службы машинописи
editComment(comment: Update<DisciplineComment>): Observable<DisciplineComment> {
this.log("Editing a Comment");
return this.http.patch<DisciplineComment>(this.odataUrl + "Comments(" + comment.id + ")", comment.changes, this.httpPatchOptions);
}
А вот соответствующий сервис
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Comment> comment)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
using (CreateTimedTelemetryTrace())
{
var entity = await DataContext.Comments.FindAsync(key);
if (entity == null)
{
return NotFound();
}
comment.Patch(entity);
var now = DateTime.UtcNow;
entity.UpdatedBy = RequestContext.Principal.Identity.Name;
entity.UpdatedAt = now;
try
{
await DataContext.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!CommentExists(key))
{
return NotFound();
}
throw;
}
return Updated(entity);
}
}
Когда это выполнено, по точке останова я вижу, что ModelState.IsValid показывает недопустимое из-за следующей ошибки:
Невозможно применить PATCH к свойству навигации 'resolution' для типа сущности'APP.Models.Comment'.
Я нашел хак, который обходит часть проблемы - если я добавлю следующую строку прямо перед запросом:
comment.changes.resolution = null;
Тогда мой код выполняется просто отлично на стороне сервера, и обновление сделано.К сожалению, я не могу просто добавить разрешение назад после выполнения, учитывая, что оно является наблюдаемым.
Есть ли лучший способ обойти проблему исправления или способ повторно применить разрешение к наблюдаемой?