2010-05-06 7 views
5

Ich möchte ein Datenbankskript generieren, ohne dass eine tatsächliche Datenbankverbindungszeichenfolge deklariert wurde.Fließendes NHibernate ExportSchema ohne Verbindungszeichenfolge

dies jetzt tun verwende ich NHibernate ExportSchema basiert auf einer NHibernate-Konfiguration mit Fluent NHibernate auf diese Weise erzeugt (während meiner ISessionFactory Erstellungsmethode):

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 ist ein FluentNHibernate IPersistenceConfigurer, die richtige zu bekommen benötigt wird SQL-Dialekt für die Datenbankerstellung.

Wenn Factory mit einer vorhandenen Datenbank erstellt wird, funktioniert alles einwandfrei. Aber was ich tun möchte, ist ein NHibernate Configuration-Objekt auf einer ausgewählten Datenbank-Engine ohne eine echte Datenbank hinter der Szene zu erstellen ... Und ich schaffe es nicht, dies zu tun.

Wenn jemand eine Idee hat.

+0

Haben Sie eine Antwort darauf gefunden? Ich habe die gleiche Anforderung. – longday

Antwort

0

Versuchen Sie es mit:

.Create(false, false); 

Inplace von

.Execute(false, false, false); 

Sie die Connectionstring-Eigenschaft auf den IPersistenceConfigurer (fluentDatabaseProvider) nicht hinzufügen.

+0

Sie haben Recht, es funktioniert. Vielen Dank! – Vince

1

Das habe ich benutzt. Mein Fehler war BuildSessionFactory aufzurufen, die versucht, eine Verbindung zur Datenbank herzustellen:

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

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