Domanda

Voglio generare uno script di database senza avere uno stringa effettiva connessione al database dichiarato.

Per fare questo, per ora io uso basi NHibernate ExportSchema su una configurazione di 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 dialetto SQL per la creazione del database.

Quando in fabbrica viene creato con un database esistente, tutto funziona bene. Ma quello che voglio fare è quello di creare un oggetto di configurazione NHibernate su un motore di database selezionato senza un vero e proprio database dietro le quinte ... E non riesco a farlo.

Se qualcuno ha qualche idea.

È stato utile?

Soluzione

Provare a utilizzare:

.Create(false, false);

inplace di

.Execute(false, false, false); 

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

Altri suggerimenti

Questo è quello che ho usato. Il mio errore stava chiamando BuildSessionFactory che cerca di 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top