Gestione di una violazione di n vincoli multipli multipli in insert

2

Ho un sito asp.net mvc 5.

Ho una tabella di posti / POCO con 3 vincoli unici (URL, Email e ovviamente ID).

Gli utenti possono aggiungere posti, ma possono violare i vincoli URL o Email unici e devo dire loro perché un inserto non è riuscito.

Sono tentato di lasciare fallire l'inserimento (violando il vincolo univoco nel database).

Potrei fare diversi round trip nel database per verificare l'unicità - ma questo è più lento, più lavoro - e in teoria crea una (molto improbabile) condizione di gara.

Vorrei anche dire all'utente (evitando idealmente messaggi tecnici di errore) - quell'URL - o Email - deve essere unico.

Che cosa è la migliore pratica qui? Cos'è veloce e amp; efficiente? Non sto usando stored procedure su questo sito (piuttosto sql parametrizzato via dapper.net) - e vorrei evitare sprocs ma forse questo è il modo migliore?

    
posta niico 13.08.2016 - 13:57
fonte

1 risposta

1

Il problema principale qui è che non puoi davvero assicurarti che un URL o un'email non siano già nel database finché non impegni l'inserimento.

Il motivo è che l'URL o l'e-mail potrebbero essere stati inseriti nel database nel tempo che intercorre tra l'esecuzione del controllo e l'inserimento.

Quindi il design più semplice è cercare di inserire il record e, se fallisce, informare l'utente quale URL o email è un duplicato e consentire loro di modificare i propri dati.

    
risposta data 13.08.2016 - 19:52
fonte

Leggi altre domande sui tag