Quindi, considera la seguente classe:
public class Solution
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
E i seguenti metodi
public void DoSomething()
{
new Item originalItem = new Item();
item.Name = "Test";
InserIntoDb(originalItem);
Assert.True(item.Id != 0);
}
public void InserIntoDb(Item item)
{
context.Item.Add(item);
context.SaveChanges();
}
In questo caso, dopo l'inserimento nel db, EF aggiorna automaticamente l'oggetto originale con il suo valore ID generato automaticamente.
Il mio problema inizia quando aggiungo qualche logica per aggiungere solo al db se il nome non esiste. Se esiste l'Insert non accade quindi la proprietà ID non è popolata.
La mia domanda è: c'è un modo per rendere il context.Item (quando si recupera tutto) per aggiornare automaticamente l'ID del valore di OriginalItem senza dover cambiare il metodo InsertIntoDb per restituire un Item e di conseguenza dover aggiungere una linea come
originalItem = InsertIntoDb(originalItem);
Grazie in anticipo
No, non esiste un modo integrato per aggiornare l'elemento con l'id dal db se esiste.
Dovrai implementare un approccio personalizzato per farlo funzionare. Se si tratta solo di una piccola o singola quantità di elementi contemporaneamente, tentare semplicemente di ottenere l'elemento denominato dal database prima dell'inserimento e quindi per l'inserimento di uno (i) non presente.
Se si esegue questa operazione per un gruppo di articoli di grandi dimensioni (più di 5000), considerare l'utilizzo di una stored procedure per eseguire questa operazione sul lato server db per le prestazioni della query.