Pregunta

Tengo una tabla Usuarios, que tiene una restricción única en el nombre de usuario (por razones obvias).

Estoy utilizando un DAL EF 4,0 para rellenar la base de datos, y en el proceso de codificación el método CreateUser ().

¿Es ...

  1. Mejor para coger el SqlException arrojado si intento insertar un nombre de usuario que ya existe.
  2. explícitamente comprobar si el nombre de usuario antes de tratar de insertarlo en la base de datos?

Si también podría dar razones de por qué, eso sería genial!

¿Fue útil?

Solución

Me gustaría comprobar si el registro existe en primer lugar. restricciones de claves únicas son útiles para protegerse contra posibles formas en que su aplicación está permitiendo que los datos "malos" a través, en primer lugar, pero no la principal parada para eso. Por lo general es una mala idea utilizar excepciones como un mecanismo de control de flujo (validación en este caso) cuando es posible evitar.

EDIT: Para evitar confusiones, no estoy diciendo que no tienen el índice único en absoluto. Debe quedar allí, pero no debe ser el principal medio de comprobación de unicidad.

Otros consejos

Yo diría que lo mejor es controlar la excepción. La base de datos está diseñado para manejar la singularidad del nombre de usuario, así que me imagino que puede hacer que sea más eficiente que sea posible. También se añade la portabilidad y la cohesión de su sistema. Si agrega usuarios en más de un lugar en el que tendrá que duplicar la comprobación de nombre de usuario o crear un método y, básicamente, el resultado final será volver a escribir lo que el motor de base de datos ya ha escrito.

Adicionalmente a lo que dijo Samuel, que había necesidad de asegurarse de que nadie entra en un registro que podrían entrar en conflicto con la suya entre su cheque y añadir el registro a la base de datos. Se podría lograr esto con una cerradura, pero luego tienes que capturar excepciones causadas por el bloqueo.

En cuanto a la duplicación de cosas en las reglas de negocio y la base de datos, estoy a favor de la base de datos de Habing tanto consitency comprobación en el lugar en que sea necesario, incluso si esto no duplicar algunas cosas en la capa de negocio. Cuanto más firmemente bloqueado su base de datos está en contra de datos no válidos, mejor. Lo protege contra el acceso a su base de datos a través de otras herramientas que no sea su aplicación, como por ejemplo un individuo de la ayuda a hacer cambios en la base de datos utilizando SSMS para corregir un problema de los datos reportados por un usuario.

Me lo segundo, dijo Samuel. La forma más eficiente es dejarlo a la base de datos. Todas las demás opciones son más tiempo y recursos ....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top