Domanda

Ho una tabella Utenti, che ha un vincolo unico sul nome utente (per ovvie ragioni).

Se si utilizza una DAL EF 4.0 per popolare il database, e nel processo di codifica del metodo CreateUser ().

E '...

  1. migliore per catturare l'SqlException gettato se provo ad inserire un nome utente già esistenti.
  2. esplicitamente controllare il nome utente prima di provare ad inserire nel database?

Se si potrebbe anche dare ragioni per spiegare perché, che sarebbe grande!

È stato utile?

Soluzione

Vorrei verificare se il record esiste prima. vincoli di chiave unici sono utili per proteggere contro i modi possibili l'applicazione è che permette di dati "cattivi" attraverso, in primo luogo, ma non la fermata principale per questo. E 'generalmente una cattiva idea da utilizzare come un meccanismo di controllo di flusso (convalida in questo caso) quando è possibile evitare eccezioni.

EDIT: Per evitare confusione, non sto dicendo che non hanno l'indice univoco a tutti. Dovrebbe essere lì, ma non dovrebbe essere il principale mezzo di controllo di unicità.

Altri suggerimenti

direi che è meglio per gestire l'eccezione. Il database è progettato per gestire l'unicità del nome utente, quindi immagino che possa farlo in modo più efficiente di quanto si può. Inoltre si aggiunge la portabilità e la coesione al sistema. Se si aggiungono gli utenti in più di un luogo si dovrà duplicare il controllo nome utente o creare un metodo e in fondo si finirà per riscrivere ciò che il motore di database ha già scritto.

In aggiunta a ciò che ha detto Samuel, avresti bisogno di fare in modo che nessuno entra in un record che possano entrare in conflitto con la vostra tra il controllo e aggiungendo il record al database. Si potrebbe raggiungere questo obiettivo con una serratura, ma poi hai avuto modo di eccezioni di cattura causati dal blocco.

Per quanto riguarda la duplicazione roba nelle regole di business e il database, io sono a favore della banca dati Habing tanto controllo consitency sul posto come è necessario, anche se questo non duplicare alcune cose nel livello di business. Il più strettamente bloccato il database è contro dati non validi e meglio. Ti protegge contro l'accesso al database tramite altri strumenti che la vostra applicazione, come ad esempio un ragazzo supporto apportare modifiche nel database utilizzando SSMS per correggere un problema di dati segnalato da un utente.

I secondo quanto ha detto Samuel. Il modo più efficace è quello di lasciare al database. Tutte le altre opzioni sono più tempo e risorse ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top