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!
"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."
ResponderEliminarYo 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.
Hola Juanma,
ResponderEliminarEl 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!