Sto utilizzando ASP.NET MVC4 con Entity Framework Code First. Ho una tabella chiamata "utenti", con la chiave primaria "UserId". Questa tabella potrebbe contenere oltre 200.000 voci.Ignora inserimento chiave duplicato con Entity Framework
Ho bisogno di inserire altri 50 utenti. Potrei fare questo come
foreach(User user in NewUsers){
context.Add(user);
}
dbcontext.SaveChanges();
Il problema è che uno o più di quei nuovi utenti potrebbero già esistere nel DB. Se li aggiungo e poi provo a salvare, genera un errore e nessuno di quelli validi viene aggiunto. Potrei modificare il codice per fare questo:
foreach(User user in NewUsers){
if(dbcontext.Users.FirstOrDefault(u => u.UserId) == null)
{
dbcontext.Users.Add(user);
}
}
dbcontext.SaveChanges();
che funzionerebbe. Il problema è, quindi deve eseguire una query 50 volte su una tabella di immissione 200.000+. Quindi la mia domanda è: qual è il metodo più efficiente di inserire questi utenti, ignorando eventuali duplicati?
forse 'context.AddOrUpdate (utente);' è quello che si vuole –
@OO Non è in realtà gli utenti, è dati diversi che vengono estratti da un'API. L'API può o non può fornire gli stessi dati in più chiamate sequenziali. Ho appena usato "Utenti" perché era il primo esempio a cui pensavo. – Jordan
Ho avuto lo stesso problema e non ho trovato una soluzione adeguata. Esistono scenari validi per questo, ad esempio quando si effettua un'importazione di massa da CSV in cui l'indirizzo di posta elettronica deve essere univoco in un database esistente. Leggere tutte le chiavi esistenti in memoria non sembra buono per le prestazioni, né aggiungere ciascuna voce separatamente. Sembra che ciò che è necessario sia qualcosa come INSERTO IGNORA. – acarlon