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 

确认(如在第一个答案说明)与“