Diciamo che ho una semplice tabella che contiene solo due colonne:Come si aggiorna una tabella con LINQ-to-SQL senza dover cancellare tutti i record esistenti?
MailingListUser
- PK ID (int)
- FK UserID (int)
ho un metodo chiamato UpdateMailList(IEnumerable
.<int
> userIDs)
Come faccio, in LINQ, creare inserimenti per gli ID utente presenti nel parametro passato ma che non esistono nel db, eliminare quelli che sono nel db ma non più in UserID e lasciare il quelli che sono già presenti sia nel db che negli userID?
Un utente viene presentato con un elenco di caselle di controllo e, al primo caricamento, ha selezionato i membri esistenti selezionati per il maillista.
L'utente può quindi selezionare e deselezionare vari utenti e premere "salva". Una volta che questo accade, ho bisogno di aggiornare lo stato del database con lo stato della lista di controllo.
Ecco quello che sto facendo ora:
public void UpdateMailList(IEnumerable<int> userIDs)
{
using (MainDataContext db = new MainDataContext())
{
var existingUsers = (from a in db.MailListUsers
select a);
db.MailListUsers.DeleteAllOnSubmit(existingUsers);
db.SubmitChanges();
var newUsers = (from n in userIDs
select new MailListUser
{
UserID = n
});
db.MailListUsers.InsertAllOnSubmit(newUsers);
db.SubmitChanges();
}
}
}
}
C'è un modo migliore di una semplice cancellazione di tutte le voci della tabella di MailingListUser, e re-inserendo tutti i valori userids?