Question

J'ai une table d'utilisateurs, ce qui a une contrainte unique sur le nom d'utilisateur (pour des raisons évidentes).

Je suis avec un objectif EF 4.0 DAL pour remplir la base de données, et dans le processus de codage de la méthode CreateUser ().

Est-il ...

  1. Best pour attraper le SqlException jeté si je tente d'insérer un nom d'utilisateur qui existent déjà.
  2. vérifier Explicitement le nom d'utilisateur avant d'essayer de l'insérer dans la base de données?

Si vous pouvez également donner des raisons pour lesquelles, ce serait génial!

Était-ce utile?

La solution

Je voudrais vérifier si le dossier existe d'abord. contraintes de clés uniques sont utiles pour se prémunir contre les moyens possibles de votre application permet à des données « mauvais » par en premier lieu, mais pas le principal pour cet arrêt. Il est généralement une mauvaise idée d'exceptions d'utilisation en tant que mécanisme de contrôle de flux (validation dans ce cas) quand il est possible d'éviter.

EDIT: Pour éviter toute confusion, je ne dis pas que ne pas l'index unique du tout. Il devrait être là, mais il ne devrait pas être le principal moyen de vérifier l'unicité.

Autres conseils

Je dirais qu'il est préférable de gérer l'exception. La base de données est conçu pour gérer l'unicité du nom d'utilisateur, donc j'imagine qu'il peut le faire plus efficacement que vous le pouvez. il ajoute également la portabilité et la cohésion à votre système. Si vous ajoutez des utilisateurs dans plus d'un endroit où vous devrez dupliquer la vérification de nom d'utilisateur ou créer une méthode et, fondamentalement, vous finirez par réécrire ce que le moteur de base de données a déjà écrit.

En plus de ce que Samuel a dit, vous aurez besoin de faire en sorte que personne ne pénètre dans un dossier qui pourrait entrer en conflit avec le vôtre entre votre chèque et ajouter l'enregistrement à la base de données. Vous pouvez y parvenir avec une serrure, mais vous avez des exceptions de prises causées par la serrure.

En ce qui concerne la duplication des choses dans les règles métier et la base de données, je suis en faveur de la base de données Habing autant la vérification des consitency en place est nécessaire, même si cela ne dupliquer certaines choses dans la couche d'affaires. Le verrouillage plus étroitement votre base de données par rapport aux données non valides mieux. Il vous protège contre l'accès à votre base de données via d'autres outils que votre application, comme un gars de soutien des changements dans la base de données à l'aide SSMS pour corriger un problème de données communiquées par un utilisateur.

Je seconde ce que dit samuel. La façon la plus efficace est de le laisser à la base de données. Toutes les autres options sont plus de temps et de ressources ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top