2009-05-03 8 views
8

Haciendo mis primeros pasos con NHibernate, intento crearlo automáticamente a partir de los archivos hbm. El back-end de la base de datos es SQL Server 2008 Developer Edition.NHibernate SchemaExport no crea tablas cuando "script" es falso

Este es el código de ejemplo común que veo en NHibernate tutoriales:

var cfg = new Configuration(); 
cfg.Configure(); 
cfg.AddAssembly(typeof(Posting).Assembly); 
new SchemaExport(cfg).Execute(false,true,false,false); 

Lamentablemente, esto no funciona. Configuré show_sql en true y no imprime ninguna declaración. Al mirar el generador de perfiles SQL, veo que mi aplicación se conecta a la base de datos, pero luego no hace nada.

puedo arreglar que al cambiar el primer parámetro ("script") true:

new SchemaExport(cfg).Execute(true,true,false,true); 

No entiendo por qué. Los parámetros de SchemaExport lamentablemente no se explican realmente (tampoco la diferencia entre .Create y .Execute), y me gustaría saber qué hace este parámetro, y por qué no es necesario, es decir, cuando se usa SQL Compact Edition (que también funciona cuando el script es falso)

Respuesta

27

El SchemaExport es parte de la utilidad Hbm2Ddl que está realmente separada de la funcionalidad de NHibernate. No utiliza "show_sql" que se usa mientras NHibernate se está ejecutando solamente.

Para obtener una copia del esquema se crea utiliza .SetOutputFile (nombre de archivo)

Este es el método que utilizo cuando quiero crear una nueva base de datos. me sale un esquema en el archivo con formato MyDDL.sql y la base de datos se construye a partir del esquema:

private void BuildSchema(Configuration config) 
{ 

     new SchemaExport(config) 
      .SetOutputFile(_fileName + "MyDDL.sql") 
      .Execute(true /*script*/, true /*export to db*/, 
        false /*just drop*/, true /*format schema*/); 
} 

SchemaExport.Create es sólo un acceso directo a Schema.Execute con la gota justa falso y verdadero formato.

public void Create(bool script, bool export) 
    { 
     Execute(script, export, false, true); 
    } 
+0

Estoy usando esto con NHibernate 3.3, está escribiendo en el archivo, pero no en la base de datos. –

Cuestiones relacionadas