У меня есть Job
класс со многими JobBudgetItem
с. Я реализую метод PATCH на контроллере, используя встроенную библиотеку JsonPatch от Microsoft. У меня проблема в том, что когда я пытаюсь обновить поле в JobBudgetItem
, EF Core не сохраняет изменения. Вместо этого он создает дубликаты каждого существующего JobBudgetItem
с другим идентификатором.
Работа
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<JobBudgetItem> JobBudgetItems { get; set; }
JobBudgetItem
public int Id { get; set; }
public string Category { get; set; }
public int JobId { get; set; }
public Job job { get; set; }
GET / Job / 1
{
"id": 1,
"name": "Test",
"jobBudgetItems": [
{
"id": 1,
"category": "ATestCategory",
},
{
"id": 12,
"category": "BTestCategory",
}
]
}
PATCH / Job / 1
[{
"op": "replace", "path": "/jobBudgetItems/0/category", "value": "CTestCategory"
}]
JobsController
[HttpPatch("{id}")]
public async Task<IActionResult> PartiallyUpdateJob(int id, [FromBody] JsonPatchDocument<JobDTO> patchJob)
{
var jobFromRepo = await _jobManager.GetJobAsync(id);
var jobUpdateDto = _mapper.Map<JobDTO>(jobFromRepo);
patchJob.ApplyTo(jobUpdateDto);
_mapper.Map(jobUpdateDto, jobFromRepo);
await _jobManager.UpdateJobAsync(jobFromRepo);
return Ok(_mapper.Map<JobDTO>(jobUpdateDto));
}
Repo
public async Task<IDataOperationResult> UpdateJobAsync(Job job) {
_context.Jobs.Update(job);
try {
await _context.SaveChangesAsync();
return new OperationResult(true);
} catch {
return new OperationResult(false);
}
}
Как сделать, чтобы обновление JobBudgetItem сохранялось в базе данных?