Обновлять отсоединенную сущность только новыми полями в C # .NET Core 2.1 - PullRequest
0 голосов
/ 30 октября 2018

У меня есть ситуация, когда мой API может принимать объекты, где внутренние данные могут иметь всю информацию или только идентификатор. Теперь, если клиент отправляет объект A как пример

{
"description": "value",
"childA": {
    "id": 123,
    "otherA: {
        "id": 321
    }
},
"childB": {
    "id": 123,
    "otherBNew: {
        "value": "some new text for new record"
    }
}

Я хочу, чтобы мой API обнаруживал, установлен ли «id», чтобы игнорировать другие значения, кроме child, и если для «child» задано не смотреть на значение или какие-либо другие поля. Проблема с контекстом. Обновление заключается в том, что он пытается вставить дочерние данные со всеми значениями (нулевыми и значениями по умолчанию) для не введенных полей. Кроме того, у потомка есть «тип», который является enum и обязательным, но я хочу, чтобы он игнорировался, если установлен идентификатор.

Все дочерние элементы имеют одинаковое время, и то же самое относится и к внутренним дочерним элементам. Структура проста, как так

{ id: 123, value: "text", childTag: {id: 4, value: "child", childTag: null} }

Есть ли способ сделать это? Или мне нужно каждый раз получать данные из БД и обновлять только измененные поля?

1 Ответ

0 голосов
/ 30 октября 2018

Если вы хотите обновить только установленные поля, вы, безусловно, можете этого добиться. Самый простой подход - использовать JsonPatch для применения обновлений к вашей сущности, но в качестве простого примера вы могли бы сделать следующее.

var entity = new YourClass();
entity.id = update.id;
dbContext.Attatch(entity);

Теперь любые поля, которые изменяются, помечены и могут быть сохранены в изоляции.

entity.Description = "xxxx";

Проблема в этом, очевидно, заключается в том, что любые поля, которые вы хотите обновить, нужно проверить, чтобы узнать, нужно ли обновлять значение или нет, или тратить время на повторное сохранение тех же данных. В качестве альтернативы, если вы можете использовать JsonPatch, вы применяете исправление к этой временной сущности, а затем сохраняете свой контекст.

Для дальнейшего чтения на JsonPatch:

https://dotnetcoretutorials.com/2017/11/29/json-patch-asp-net-core/

...