Патч Odata Delta с неверным состоянием модели из-за сложной сущности - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь установить дельта-патч 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;

Тогда мой код выполняется просто отлично на стороне сервера, и обновление сделано.К сожалению, я не могу просто добавить разрешение назад после выполнения, учитывая, что оно является наблюдаемым.

Есть ли лучший способ обойти проблему исправления или способ повторно применить разрешение к наблюдаемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...