2010-05-06 6 views
5

Desidero generare uno script di database senza che sia stata dichiarata una stringa di connessione al database effettiva.Fluent NHibernate ExportSchema senza stringa di connessione

Per fare questo, per ora io uso basi NHibernate ExportSchema su una configurazione NHibernate generata con Fluent NHibernate in questo modo (durante il mio metodo di creazione ISessionFactory):

FluentConfiguration configuration = Fluently.Configure();    
//Mapping conf ... 
configuration.Database(fluentDatabaseProvider); 
this.nhibernateConfiguration = configuration.BuildConfiguration(); 
returnSF = configuration.BuildSessionFactory();  

//Later 
new SchemaExport(this.nhibernateConfiguration)    
       .SetOutputFile(filePath) 
       .Execute(false, false, false);  

fluentDatabaseProvider è un IPersistenceConfigurer FluentNHibernate che è necessaria per ottenere una corretta sql dialect per la creazione del database.

Quando factory è creato con un database esistente, tutto funziona correttamente. Ma quello che voglio fare è creare un oggetto di configurazione NHibernate su un motore di database selezionato senza un vero database dietro la scena ... E non riesco a farlo.

Se qualcuno ha qualche idea.

+0

Hai trovato una risposta a questo? Ho lo stesso requisito. – longday

risposta

0

Provare a utilizzare:

.Create(false, false); 

inplace di

.Execute(false, false, false); 

Non aggiungere la proprietà ConnectionString alla IPersistenceConfigurer (fluentDatabaseProvider).

+0

Hai ragione sta funzionando. Grazie! – Vince

1

Questo è quello che ho usato. Il mio errore era chiamare BuildSessionFactory che prova a connettersi al database:

 var config = Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008) 
      .Mappings(m => 
      m.FluentMappings.AddFromAssemblyOf<SessionManager>()); 

     new SchemaExport(config.BuildConfiguration()) 
       .SetOutputFile(filedestination) 
       .Create(false, false);