целевое местоположение, указанное в сегменте пути, не было найдено с помощью исправления json

#c# #asp.net-core #asp.net-core-5.0

Вопрос:

У меня есть модель представления с одним из имен свойств, написанных как:

 public string FaxNumber { get; set; }
 

Во время исправления JSON пользователь отправляет запрос как:

 {

 "op": "replace",
 "value": "4056666666",
 "path": "/fax_number"
}
 

Я реализовал метод исправления следующим образом:

 public async Task<int> PatchAddressAsync(int id, JsonPatchDocument<Address> request)
{
    var cust = await _dbContext.Address.FirstOrDefaultAsync(x => x.ID == id);

    if (cust == null)
        throw new NotFoundException($"The supplied id is not valid.");

    request.ApplyTo(cust);

    _dbContext.Address.Update(cust);

    await _dbContext.SaveChangesAsync(default(CancellationToken));
    return cust.ID;
}
 

Но моя проблема в том, что у меня есть другое имя для имени факса столбца в сущности адреса, которое определяется как:

 [Column("fax")]
public string FaxNumber { get; set; } 
 

Теперь, когда я устаю request.ApplyTo(cust); , это дает мне ошибку:

Целевое местоположение, указанное в сегменте пути «номер факса», не найдено.

Как мне смоделировать свою сущность и путь в этом случае? Как можно использовать свойство, сопоставленное с моделью представления, но не совпадающее с сущностью?

Комментарии:

1. Единственный способ, который я могу придумать, — это создать новую модель, скажем, AddressDTO с нужным именем свойства, настроить сопоставление между базовой моделью EF и DTO, преобразовать базовую модель EF в DTO, применить JSONPatch к DTO, а затем преобразовать DTO обратно в базовую модель EF для внесения изменений в бд. Рад быть исправленным !!

2. это звучит как рецидив. Любой код может быть полезен.

3. Это не рекурсия. Просто прокси — модель с нужными именами свойств

4. вы можете обратиться к следующей статье, чтобы использовать Automapper с исправлением JSON , затем создать модель DTO и использовать automapper для сопоставления объекта базы данных и модели представления.