Sto creando un'app Web in asp.net core con ef core utilizzando il modello di repository. Sto cercando di inserire un'entità che funziona benissimo quando provo a verificare se è già presente in db o quindi se sì che aggiornare la stessa entità nella stessa API mi dà questo errore.
System.InvalidOperationException: 'L'istanza del tipo di entità' Consultazione 'non può essere tracciata perché è già stata tracciata un'altra istanza di questo tipo con la stessa chiave. Quando si aggiungono nuove entità, per la maggior parte dei tipi di chiave verrà creato un valore di chiave temporanea univoco se non viene impostata alcuna chiave (ovvero se alla proprietà chiave viene assegnato il valore predefinito per il suo tipo). Se si stanno impostando esplicitamente valori chiave per nuove entità, assicurarsi che non si scontrino con entità esistenti o valori temporanei generati per altre nuove entità. Quando si collegano entità esistenti, assicurarsi che solo un'istanza di entità con un determinato valore chiave sia collegata al contesto. "
[HttpPost]
public ApiResponse InsertConsultation([FromBody] Consultation consultation)
{
if (!ModelState.IsValid)
{
return new ApiResponse(StatusCodes.Status400BadRequest, error: "error");
}
var consult = _consultationService.GetConsultationById(consultation.Id);
if (consult !=null)
{
_consultationService.UpdateConsultation(consultation);
return new ApiResponse(StatusCodes.Status200OK, success: "isSuccess");
}
_consultationService.InsertConsultation(consultation);
return new ApiResponse(StatusCodes.Status201Created, success: "isSuccess");
}
Il processo di aggiornamento è
1- Recupera l'oggetto consultato nel tuo codice:
var consult = _consultationService.GetConsultationById(consultation.Id);
2- apportare modifiche all'oggetto di recupero (copiare il contenuto dalla consultazione alla consultazione) non è disponibile.
3- aggiornare l'oggetto consult
4- salvare le modifiche.
Forse prova questo per la linea prima di SaveChanges ().
_context.AddOrUpdate(entity);
Ciò richiede lo spazio dei nomi System.Data.Entity.Migrations.
La tua domanda potrebbe già avere una risposta qui: Aggiorna riga se esiste Altrimenti Inserisci logica con Entity Framework