Ho bisogno di aggiornare solo i campi menzionati nel corpo della richiesta put, il problema attuale è che tutti i valori che non sono menzionati nell'entità da aggiornare sono impostati su null qui sotto è la mia implementazione di aggiornamento corrente nel repository generico.
public virtual void Update(T entity)
{
Context.Attach(entity);
Context.Entry(entity).State = EntityState.Modified;
}
Hai bisogno di due diversi passaggi. Per prima cosa devi eseguire un'operazione di patch. Descrizione qui
public IActionResult PatchEntity(int id, [FromBody] JsonPatchDocument<Entity> patchdoc)
{
var entity = dbContext.Entities.Find(e=>e.Id == id);
patchdoc.ApplyTo(entity);
dbContext.Update(entity);
return Ok(entity);
}
Ecco un metodo per eseguire un aggiornamento parziale su DB (dai un'occhiata anche a questa domanda ):
public virtual void Update(params object[] keys, T entity)
{
var current = Context.Entities.Find(keys);
Context.Entry(entity).CurrentValues.SetValues(entity);
Context.SaveChanges();
}
Se non è necessario aggiornare parzialmente il record del database, si va bene con:
public virtual void Update(T entity)
{
Context.Update(entity); // entity is attached by default after select of entity
Context.SaveChanges();
}
finalmente capito senza nemmeno cambiare il repository ho appena aggiunto una configurazione nel file di configurazione di automapper per ignorare qualsiasi valore nullo
CreateMap<TeamDto, Team>().ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));