2013-06-20 15 views
5

Ho ereditato un'applicazione .NET 2008 MVC che utilizza Nhibernate. Lo sviluppatore precedente non è riuscito a generare un database per questo progetto. Sono abbastanza nuovo da oscurare, e sto cercando di capire quale sarebbe la soluzione ottimale per creare uno script di database per la creazione di un nuovo database usando i mapping correnti. Ho passato molti post su questo sito, ma ancora non capisco completamente come farlo funzionare. Qualsiasi consiglio è apprezzato.Generazione di script schema database da NHibernate

Grazie!

risposta

6

Supponendo di avere mappature hbm.xml e un file di configurazione valido NHibernate, si potrebbe scrivere il seguente codice in un console app per generare lo schema di SQL:

//load initial config from hibernate config file 
Configuration cfg = new Configuration().Configure("hibernate.cfg.xml"); 

//add assembly in which the hbm.xml mappings are embedded (assuming Product class is in this assembly) 
cfg.AddAssembly(typeof(Product).Assembly); 

//this will generate the SQL schema file in the executable folder 
new SchemaExport(cfg).SetOutputFile("schema.sql").Execute(true, false, false); 

Se si dispone di mappature fluente, dovrebbe apparire più simile:

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005).Mappings(
      m => m.FluentMappings.AddFromAssemblyOf<Product>()).ExposeConfiguration(
       config => 
        { 
         new SchemaExport(config).SetOutputFile("schema.sql").Execute(true, false, false); 
        }).BuildConfiguration(); 
+0

Grazie! Ho mappature fluenti. Quando stai dicendo di scrivere un codice in un'app console, come posso allegare quella console alla mia soluzione? Grazie ancora per questo! – ssokol91

+2

Fondamentalmente, aggiungere un nuovo progetto "Console Application" alla soluzione di Visual Studio esistente. Oppure puoi aggiungere questo gruppo di codice all'avvio della tua app esistente o in un evento, ovunque tu voglia. – Bredstik

+0

È grandioso! Ho notato la riga "AddFromAssemblyOf ". Devo farlo per ogni classe mappata o non riesco a capirlo correttamente? Tks! – ssokol91