14

Abbiamo un'app ASP (MVC) e utilizziamo Entity Framework 6 per connettersi ai nostri database. DbContext è costruito in un modo standard e carica la stringa di connessione per nostro conto. Il codice generato è simile al seguente:Impostazione stringa di connessione EF nell'app Web di Azure

public partial class MyContext : DbContext 
{ 
    public MyContext(string connectionName) 
     : base("name=" + connectionName) 
    { 
    } 
} 

Abbiamo impostato la stringa di connessione in un file web.config locale, anche in maniera standard:

<configuration> 
    <connectionStrings> 
    <add name="DefaultConnection" 
     connectionString="metadata=...;provider connection string=&quot;...&quot;" 
     providerName="System.Data.EntityClient" /> 

Quando pubblichiamo l'applicazione per Azure navighiamo al Azure Portale, quindi nelle Impostazioni dell'app Web, quindi nell'elenco di Stringhe di connessione. Lì aggiungiamo la stringa di connessione EF che avevamo usato localmente. Quando riavviamo e visitiamo l'app, riceviamo un errore di run-time in base al tipo di stringa di connessione che scegliamo.

Per un Custom tipo otteniamo il seguente errore di runtime:

Keyword not supported: 'data source'.

Per SQL Server o SQL Database otteniamo il seguente errore di runtime:

Keyword not supported: 'metadata'.

questo sembra davvero come un semplice storia quindi ci stiamo chiedendo cosa non va.

+0

Dai un'occhiata qui: http://azure.microsoft.com/blog/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work/ – Fals

risposta

17

Il problema sono le citazioni con escape: &quot;.

Le stringhe di connessione in web.config hanno virgolette di escape perché sono serializzate in un attributo XML. Quando si immette una stringa di connessione nel portale di Azure, è necessario fornire la stringa raw senza caratteri di escape. Qualcosa di simile a questo: la risposta di

metadata=...;provider connection string="Data Source=..."

David Ebbo è un bene per la conferma che l'ambiente è impostato come ci si aspetta. È inoltre utile prestare attenzione al file .pubxml durante la pubblicazione tramite la procedura guidata in Visual Studio: proverà a popolare anche le stringhe di connessione.

+0

Ho lo stesso problema e dopo aver speso al ong time searching Non ho capito la soluzione. Azure ignora semplicemente le impostazioni dell'applicazione e utilizza la stringa di connessione da web.config. Come vedo nel [Canale 9 video] (https://channel9.msdn.com/Shows/Azure-Friday/Custom-configuration-and-application-settings-in-Azure-Web-Sites-with-Stefan-Schackow), sarebbe "magico", ma non lo è. –

9

"personalizzato" dovrebbe essere corretto qui. In tal caso, il providerName viene lasciato invariato, quindi se nella configurazione è presente System.Data.EntityClient, questo deve rimanere dopo che il runtime di Azure lo ha modificato.

Provare a Kudu Console e fare clic su Ambiente per assicurarsi che la stringa di connessione sia corretta lì.

1

Se si dispone di questa linea in web.connfig

<add name="Entities" connectionString="metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX&quot;" providerName="System.Data.EntityClient" /> 

Aggiungere questo portale azzurro:

Name Column => Entities 

Value Column => metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX" 

"Custom" - In the drop selection box 

Assicurarsi che (come indicato in prima risposta) per sostituire &quot; con "

Problemi correlati