如何通过Windows Azure(预览)管理门户设置ADO.NET实体框架连接字符串?

时间:2013-01-22 13:31:20

标签: entity-framework deployment azure connection-string azure-web-sites

在Windows Azure(预览)管理门户中,您可以更改网站的配置选项(请参阅http://www.windowsazure.com/en-us/manage/services/web-sites/how-to-configure-websites/#howtochangeconfig)。

我目前通过Web.Release.Config为我的ADO.NET Entity Framework连接设置连接字符串,但我想通过管理门户设置它,但无论我使用什么,我总是会遇到以下错误:

  

在。中找不到指定的命名连接   配置,不打算与EntityClient提供程序一起使用,   或无效。

它适用于常规连接字符串,即没有定义元数据和映射信息的元数据键(csdl,ssdl,msl)。

这就是我的所作所为:

我转到https://manage.windowsazure.com/#Workspaces/WebsiteExtension/Website/[MY-STAGING-SITE-NAME]/configure

在“连接字符串”下,我有一个名为“ApplicationServices”的密钥,如下所示:

  

服务器= TCP:xxxxx.database.windows.net,1433;数据库= XXXXX;用户   ID = XXXXX XXXXX @;密码= XXXXX; Trusted_Connection = FALSE;加密= TRUE;连接   超时= 30;

这个有效。

我有另一个用于Entity Framework连接的密钥。我们称之为一个FooBarContext。它看起来像这样:

  

元数据= RES:// /Models.FooBarContext.csdl|res:// /Models.FooBarContext.ssdl|res://*/Models.FooBarContext.msl;provider=System。 Data.SqlClient提供方   连接   字符串=“服务器= TCP:fooserver.database.windows.net,1433;数据库= foobar的;用户   ID = MYNAME @ fooserver;密码= XXXXXXXXXX; Trusted_Connection = FALSE;加密= TRUE;连接   超时= 30;“

这个导致上述错误。它是从Web.Release.Config中的工作值复制的,带有& quot;取而代之的是“。

我尝试过其他变体:使用& quot;未触及,最后添加了元数据,但无济于事。我已经通过第二个网站重现了这个问题。

5 个答案:

答案 0 :(得分:46)

我的问题的解决方案是从实体的“SQL Azure / SQL Server / MySQL / Custom”选择器中选择“自定义”而不是“SQL Azure”框架连接字符串,即使数据库确实在SQL Azure上运行。

答案 1 :(得分:12)

enter image description here

替换

"

"

在连接字符串中。

答案 2 :(得分:4)

我不仅要使用双引号(或单引号)而不是"(并为类型选择Custom),但我还必须确保在我的转换配置中有一个虚拟值。我正在替换整个connectionStrings节点,但决定保留它并添加:

<add xdt:Transform="Replace" xdt:Locator="Match(name)" name="FooBarEntities" connectionString="temp" providerName="System.Data.EntityClient" />

没有这个,我收到以下错误:

The connection string 'FooBarEntities' in the application's configuration file does not contain the required providerName attribute.

答案 3 :(得分:0)

除上述答案外,还有两件非常重要的事情:

  1. 您应该从“name = connectionString”中删除“name =” 在构造函数中:
  2.   

    public MyEntities(string connectionString)                   :base($“name = {connectionString}”)               {               }

    1. 您应该在app.config中保留连接字符串的“重复”,但是 用虚拟文本替换连接字符串,正确连接字符串 将从Azure加载。这是providerName部分所需要的。 请阅读: https://mohitgoyal.co/2017/07/05/update-connection-string-for-entity-framework-in-azure-web-app-settings/comment-page-1/

答案 4 :(得分:-1)

我遇到了同样的问题。我解决了,把这个连接字符串放在web.config中:

<add name="eManagerTurModelConnection" connectionString="metadata=res://*/ORM.eManagerFinanceModel.csdl|res://*/ORM.eManagerFinanceModel.ssdl|res://*/ORM.eManagerFinanceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=<server>.database.windows.net;Initial Catalog=eManagerTur;Integrated Security=False;User ID=<user>;Password=<Password>;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

在我删除了我的网站的连接字符串之后,工作了,因为它没有获取我在web.config中添加的连接字符串。

英语不好...... =)