Ci sono molti modi per la pelle questo gatto, alcune tecniche che posso pensare:
1. Eliminare tutti i ruoli e reinserire
Questo è un approccio diretto. Rimuovi tutti i ruoli per l'utente e reinserisci. Normalmente l'utente appartiene solo a pochi ruoli (meno di 10). Inoltre, ci sono buone probabilità che nessun'altra chiave esterna si colleghi a questa tabella molti-a-molti.
2. Tieni traccia dei cambiamenti e applicare solo le modifiche
questo è più lavoro, ma più efficiente, anche se solo leggermente in questo caso. Strumenti come ORMs
rendono il rilevamento e l'applicazione di questo tipo di modifiche un gioco da ragazzi.
3. Applicare le modifiche come l'utente effettua la variazione
In questo caso suppongo che è accettabile applicare i cambiamenti dB come utente finale associa l'utente ai ruoli. Forse è un database locale e ogni transazione è di breve durata. Ma immagino che questo sia uno scenario improbabile.
Non penso che ci sia qualcosa di sbagliato in questo caso particolare da eliminare e reinserire.
fonte
2012-02-17 20:24:42
ecco perché abbiamo i parametri, si passa l'ID utente e il ruoloID come parametro e quindi si esegue: 'ELIMINA DA MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH
Questa è in realtà una domanda migliore di quella che sembra la superficie. Se hai un'interfaccia utente che ti consente di modificare i molti lati della tabella e aggiornarla in modalità batch quando l'utente fa clic su Salva (anziché eseguirli uno alla volta) è possibile che un altro utente possa modificare la tabella sotto di te in modo da non dover Sono sicuro che, ad esempio, un altro utente ha aggiunto dei ruoli mentre l'utente corrente stava modificando nell'interfaccia utente – JohnFx