2013-09-23 19 views
7

La definizione del tipo di un provider di tipo F # richiede spesso un'espressione costante, ad es. per il provider di tipo SQL:Provider di tipo F # e integrazione continua

type dbSchema = SqlDataConnection<"Data Source=MySqlServer;Initial Catalog=MyDatabase;"> 

Tuttavia, quando commesso il codice per SCM, e avendo inoltre un build server fare la sua cosa, probabilmente non si vuole utilizzare la stessa stringa di connessione, ma piuttosto la stringa di connessione di un database del server SQL generato dal processo di compilazione.

Esiste una soluzione per questo problema?

Sarebbe davvero bello poterlo fare, poiché fornirebbe un controllo in fase di compilazione del codice di accesso al database.

Aggiornamento La soluzione proposta da @tomaspetricek lavorato molto bene, ma ho dovuto aggiungere un nome del provider alla stringa di connessione:

<add name="DbConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=MySqlServer;Initial Catalog=MyDatabase;"/> 
+0

Sarebbe ancora meglio se quella stringa provenisse da un file di configurazione. –

+0

@RobertHarvey Effettivamente, questo è esattamente ciò che può essere fatto facilmente ;-) –

risposta

12

Si può certamente indicare la stringa di connessione utilizzando una chiave in un file di configurazione (vedi MSDN documentation):

SqlDataConnection<ConnectionStringName="...", ConfigFile="app.config"> 

In generale, un fornitore di tipo può richiedere qualche espressione costante, ma penso che la maggior parte di quelli ampiamente utilizzati fornire un modo per evitarlo. Ad esempio, SqlDataConnection può leggere l'impostazione dal file di configurazione, altri provider di tipo F standard standard consentono di specificare LocalSchemaFile che consente di specificare la struttura necessaria localmente (ad esempio il file *.dbml per SQL).

I provider di tipi di dati F # possono portare l'URL a un file remoto, ma possono anche prendere il file locale. Quindi penso che dovrebbe esserci sempre un modo per specificare le informazioni senza specificare una stringa di connessione costante (ecc.), Ma non esitare a chiedere informazioni sui provider specifici.

+0

Ho aggiornato la domanda con un esempio. – spacedoom

Problemi correlati