14

我們有一個ASP .NET(MVC)應用程序,並且正在使用實體框架6來連接到我們的數據庫。 DbContext是以標準方式構造的,它代表我們加載連接字符串。生成的代碼看起來是這樣的:在Azure Web App中設置EF連接字符串

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

我們在當地web.config中設置連接字符串還以標準的方式:

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

當我們發佈應用到Azure中,我們導航到Azure的門戶,然後轉到Web應用程序的設置,然後轉到連接字符串列表。在那裏,我們添加了我們在本地使用的EF連接字符串。當我們重新啓動並訪問應用程序時,根據我們選擇的連接字符串的類型,我們會得到運行時錯誤。

對於Custom類型,我們得到以下運行時錯誤:

Keyword not supported: 'data source'.

對於SQL ServerSQL Database我們得到以下運行時錯誤:

Keyword not supported: 'metadata'.

這確實似乎是一個簡單的故事,所以我們想知道發生了什麼問題。

+0

更換&quot;看看這裏:http://azure.microsoft.com/blog/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work/ – Fals

回答

17

問題是轉義引號:&quot;

web.config中的連接字符串由於在XML屬性中進行了序列化而引用了引號。在Azure門戶中輸入連接字符串時,應提供原始未轉義的字符串。事情是這樣的:

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

大衛博的回答是好確認環境設置爲您期望。在Visual Studio中通過嚮導發佈時,注意.pubxml文件也很有幫助:它也會嘗試填充連接字符串。

+0

我有同樣的問題和花費之後ong時間搜索我還沒有想出解決方案。 Azure會忽略應用程序設置並使用web.config中的連接字符串。正如我在[頻道9視頻]中看到的那樣(https://channel9.msdn.com/Shows/Azure-Friday/Custom-configuration-and-application-settings-in-Azure-Web-Sites-with-Stefan-Schackow ),這將是「魔術」,但不是。 –

9

'custom'在這裏應該是正確的。在這種情況下,providerName保持不變,因此如果您的配置中有System.Data.EntityClient,那麼在Azure運行時更改它之後應該保留它。

嘗試去Kudu Console並點擊環境以確保conn字符串在那裏看起來正確。

1

如果你有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" /> 

在蔚藍的門戶補充一點:

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 

確認(如在第一個答案說明)與「