2011-06-09 12 views
9

Ho creato un servizio REST WCF che utilizza Nhibernate per connettersi al database di SQL Server compatto. Da qui a configurare l'origine dati NHibernate come:percorso relativo per il file di database nel file di configurazione

<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property> 

Il fastidio che sto funzionando in ora è che io non riesco a capire come evitare di dover scrivere il percorso assoluto nella configurazione. Questo è fastidioso dal momento che tengo il file di database come parte del progetto nella cartella App_Data. Quindi non dovrei aggiornare il percorso, ad es. quando distribuisco il progetto in un'altra posizione, anche se il percorso assoluto è diverso.

Utilizzando ProcMon ho notato che se non scrivo un pat assoluto nella configurazione di origine dati, viene interpretato come relativo al percorso: * C: \ Program Files (x86) \ File comuni \ Microsoft Shared \ DevServer \ 10.0 *.

È possibile avere nhibere presupporre che vogliamo correlare il percorso alla cartella bin dell'applicazione (che è dove finisce il mio App_Data/MyDb.sdf)?

risposta

17

Si dovrebbe usare:

Data Source=|DataDirectory|\MyDb.sdf 

|DataDirectory| punti alla cartella App_Data.

+3

Solo FYI per chiunque altro è possibile utilizzare questo per generare altri parenti, cioè: '| DataDirectory | \ .. \ bin \ File.sdf'. Se solo potessi votare di più, grazie, perfetto. Conosci altre parole chiave del percorso supportate dalla stringa di connessione o è solo quella? –

+0

Vale la pena notare che il suggerimento di Paul sopra funziona, nonostante ciò che è stato detto su altri post SO. – marc

+0

Sì, un link al riferimento dove sono sepolte le definizioni delle parole chiave sarebbe fantastico ... (cita il tuo lavoro) – FizxMike

1

C'è qualche motivo per cui la configurazione di NHibernate è presente in un file XML invece di creare la configurazione a livello di programmazione utilizzando l'interfaccia di configurazione di NHibernate?

Se si ha la flessibilità, questo è come lo farei:

var path = // dynamically generate your path 
var configuration = new Configuration(); 
configuration.SetProperty(Environment.ConnectionString, String.Format("Data Source={0};", path)); 
... // other configuration properties 

Tutte le classi che avete bisogno sono sotto il namespace NHibernate.Cfg. C'è anche Fluent NHibernate, che fornisce un'interfaccia molto più pulita per costruire la tua configurazione.

Spero che questo aiuti!

Problemi correlati