NHibernate SchemaExport y Configure () catch-22
-
06-07-2019 - |
Pregunta
Quiero usar DDD en un nuevo proyecto y modelar primero mis clases, luego genere el esquema de la base de datos basado en la biblioteca de clases. Mi plan es hacer esto con la herramienta NHibernate hbm2ddl SchemaExport
.
El problema es que no puedo hacer que el SchemaExport
funcione debido a un extraño problema de catch-22 en el que me coloca. El SchemaExport
requiere un Objeto de configuración
que requiere un archivo de configuración NHibernate válido, así como un conjunto de asignaciones de bases de datos.
El catch-22 aquí es que cuando hago el Configure (), se queja " No se pudo determinar el nombre de la tabla para la entidad 'MyEntity'; elimine el atributo 'tabla' o asígnele un valor. "
Por lo tanto, el método Configure ()
requiere que exista la tabla, mientras que se supone que SchemaExport
para crearlo en función de la Configuración
que no puedo crear porque la tabla no existe.
Entonces, ¿cómo diablos se supone que debo crear una Configuración
de NHibernate válida que contenga las asignaciones requeridas para SchemaExport
para hacer algo realmente útil sin tener Configure ()
lanza y se queja de que no puede encontrar las tablas que se crearán con SchemaExport
? ¿Existe un " modo " Puedo configurar el objeto Configuration
para que no compruebe la existencia de las tablas dadas en la base de datos, ¿o hay algo más que deba hacer?
Solución
¿Puede publicar su archivo de configuración?
Uso este método todo el tiempo sin tablas presentes y puedo generar el esquema sobre la marcha. Supongo que puede tener algo apagado en uno de sus archivos .hbm. Intente reducir su esquema a 1 tabla, hacer que funcione y luego construirlo desde allí. Como referencia, aquí está el código que uso para generar el esquema db:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
Esto también empujará el script a la consola por usted, para que pueda ver qué SQL se genera contra la base de datos.