jueves, 20 de junio de 2013

Tips para comprobar el modelo de Code First en Sql Server

Yo no sé tú, pero yo con Code First siempre tengo que terminar echando un vistazo a la base de datos para confirmar que las relaciones declaradas en el modelo se han inferido correctamente y se han generado como tenía previsto.

Sin duda, la mayor parte de las veces lo que hago es ver si las relaciones han implementado o no la eliminación en cascada y también ver si Code First me ha generado mágicamente algún campo del tipo Entidad_CampoClavePrincipalId para soportar una relación (es decir, no ha inferido correctamente la propiedad de clave externa a partir de mi modelo).

Pues nada, un par de tips rápidos por si quieres comprobar esto en un Sql Server:

Para ver que relaciones tienen cascada:

SELECT  *

FROM    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

WHERE   DELETE_RULE = 'CASCADE'

Para ver que campos coinciden con Texto_Texto:

SELECT  *

FROM    INFORMATION_SCHEMA.COLUMNS

WHERE   COLUMN_NAME LIKE '%[_]%'

Un saludo!

2 comentarios:

  1. "Yo no sé tú, pero yo con Code First siempre tengo que terminar echando un vistazo a la base de datos para confirmar que las relaciones declaradas en el modelo se han inferido correctamente y se han generado como tenía previsto."

    Yo suelo escribir un test. Mirar bases de datos no me gusta mucho, y el test lo puedes seguir ejecutando siempre y pillar errores si en el futuro cambias las convenciones y metes la pata.

    ResponderEliminar
  2. Hola Juanma,
    El tema de los tests es lo siguiente con lo me quiero meter (además de la integración continua) ;-)
    Lo cierto es que a día de hoy no los gasto, pero está claro que tendría que hacerlo, en eso no hay discusión. En cualquier caso, te pregunto yo ahora ¿Hablas de hacer un test que lea la estructura de bd para comprobar estas condiciones? Es decir, imagino que se podrán leer los metadatos de EF desde código y ver si ciertas relaciones han implementado o no la cascada, pero para ver si hay algún campo de bd "misterioso" que se ha creado sin tú saberlo para soportar una relación, no queda otra que buscar en la bd ¿Tampoco hay problema en que un test hiciera eso, no?
    Gracias por comentar!

    ResponderEliminar