2009-05-03 8 views
8

Effettuando i miei primi passi con NHibernate, sto cercando di farlo creare automaticamente le mie tabelle dai file hbm. Il back-end del database è SQL Server 2008 Developer Edition.NHibernate SchemaExport non crea tabelle quando "script" è falso

Questo è il codice di esempio comune che vedo in NHibernate Tutorial:

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

Purtroppo, questo non funziona. Ho impostato show_sql su true e non stampa alcuna istruzione. Guardando il profiler SQL vedo la mia Applicazione che si collega al DB, ma poi non faccio nulla.

posso risolvere che cambiando il primo parametro ("script") true:

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

Non capisco perché. I parametri di SchemaExport non sono purtroppo realmente spiegati (anche non la differenza tra .Create e .Execute), e mi piacerebbe scoprire cosa fa questo parametro e perché non è necessario, ad esempio quando si utilizza SQL Compact Edition (che funziona anche quando lo script è falso)

risposta

27

SchemaExport fa parte dell'utilità Hbm2Ddl che è realmente separata dalla funzionalità di NHibernate. Non usa "show_sql" che viene utilizzato mentre NHibernate è in esecuzione.

Per ottenere una copia dello schema si crea si utilizza .SetOutputFile (nome del file)

Questo è il metodo che uso quando voglio creare un nuovo database. ottengo uno schema formattati con file MyDDL.sql e il database è costruito dallo schema:

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 è solo una scorciatoia per Schema.Execute con il solo cadere falso e il formato vero.

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

Lo sto usando con NHibernate 3.3, sta scrivendo su file, ma non su database. –

Problemi correlati