5

Attualmente ho un progetto che utilizza le migrazioni Code-First di Entity Framework e Web Publish, dove le stringhe di connessione sono memorizzate nel file web.config.Codice WebPublish: prime migrazioni con connessione esterna File String.config

E 'giunto il momento di spostare i connectionStrings al di fuori del web.config, e come tali li mettiamo in un file connectionString.config, e hanno slowcheetah trasformandoli in webpublish.

connectionStrings.config

<connectionStrings> 
    <!-- Testing Databases --> 
    <add 
     connectionString="server=testserver;database=testdatabasename;user id=someid;password=*******" 
     name="dbname" 
     providerName="System.Data.SqlClient" 
    /> 
</connectionStrings> 

web.config relativa sezione

<connectionStrings configSource="config\connectionStrings.config"> 
    </connectionStrings> 

Ora quando carico la finestra di dialogo per la Pubblica Web (Build -> Pubblica Project), nella scheda Impostazioni I visualizzato l'errore

No Databases found in the project 

Questo indica a me che la finestra di dialogo non è intelligente it per vedere la configSource e caricare i dati da lì. Posso confermare che le connectionStrings sono caricate correttamente nel mio ambiente di sviluppo, e posso anche confermare che slowcheetah sta trasformando correttamente la configurazione nel suo ambiente di produzione.

C'è un modo per fare in modo che Visual Studio Publish visualizzi la configurazione di configurazione e consenta le migrazioni code-first?

+0

[Questo] (http://stackoverflow.com/questions/16733042/publishing-external-configuration-files-in-asp-net-mvc-project-using-visual-stud) potrebbe essere di aiuto. –

+0

@Siva Sfortunatamente non è questo il problema, altri file di configurazione sono stati distribuiti bene. Questo è un problema sul lato Visual Studio delle cose :( –

+0

Ho lo stesso identico problema, in VS 2015 CTP, anche se sono abbastanza sicuro di poterlo replicare anche su VS2013. Se utilizzo un file ConnString.config esterno, la stringa di connessione non viene rilevata dalla finestra di dialogo Pubblica Web e non è possibile utilizzare le migrazioni Code First. Qualcuno ha trovato una soluzione per questo? –

risposta

3

Ho avuto lo stesso problema anche utilizzando il codice Entity Framework 6 prima in un progetto separato dal progetto pubblicato in .net 4.5 utilizzando Visual Studio 2013 Update 4 e utilizzando un metodo di condivisione simile tramite l'attributo configSource di connectionStrings.

Io elencherò quei dettagli perché causa un po 'di tempesta perfetta. Cercando di uscirne ho incontrato alcuni bug diversi e ho dovuto modificarlo in modi diversi, secondo lo EF blog they know it's a mess and are re-factoring their approach. Questo è il meglio che ho potuto inventare (ecco i draghi):

La procedura guidata di pubblicazione non sembra comprendere configSource quindi l'ho tolto da conectionStrings in web.config lasciando un elemento vuoto (potresti anche rimuoverlo interamente ma ho ritenuto che un elemento esistente ma vuoto preferibilmente con un commento fosse più appropriato). Per farlo funzionare localmente ho aggiunto un factory di connessione per far funzionare le cose in modalità debug (localmente) e fare in modo che la procedura guidata di pubblicazione trovi la migrazione db. Ho usato una fabbrica perché una connectionString sostituisce sempre una fabbrica e ho bisogno di abusarne per far funzionare il progetto prima di qualsiasi trasformazione. Assicurati inoltre che la stringa passata al costruttore dbcontext aka "connectionStringOrDatabaseName" sia sia la stringa di connessione AND il nome del database (fa sì che il db generato in fabbrica corrisponda alla stringa di connessione db).

Ora trova il database e funziona localmente, ma in realtà non sta utilizzando il tuo sharedConfig (quindi non funzionerà sempre sulla pubblicazione). Per risolverlo ho quindi utilizzato una trasformazione web.config in xsd: Replace/Insert l'elemento connectionStrings vuoto/mancante con uno utilizzando configSource. Se provi a pubblicare ora, ti imbatterai nel problema relativo a invalid connectionStrings element is produced.

Pur essendo così vicino non riuscivo a trovare/trovare una soluzione a questo problema direttamente e quindi ho dovuto utilizzare un altro lavoro intorno: ho created a custom transformation aka xsd: Import che quando dato un attributo configSource sostituisce l'elemento genitore con il uno nell'altro file, lascerò l'implementazione come un esercizio al lettore.

Problemi correlati