#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 для сопоставления объекта базы данных и модели представления.