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

Entity framework 如何通过Windows Azure(预览)管理门户设置ADO.NET实体框架连接字符串?,entity-framework,deployment,azure,connection-string,azure-web-app-service,Entity Framework,Deployment,Azure,Connection String,Azure Web App Service,在Windows Azure(预览)管理门户中,您可以更改网站的配置选项(请参阅) 目前,我通过Web.Release.Config为ADO.NET Entity Framework连接设置连接字符串,但我希望通过管理门户设置连接字符串,但无论我使用什么,最终都会出现以下错误: 在中找不到指定的命名连接 配置,不打算与EntityClient提供程序一起使用, 或者无效 它适用于常规连接字符串,即没有定义元数据和映射信息的元数据键(csdl、ssdl、msl) 我是这样做的: 我去 在“连接字符

在Windows Azure(预览)管理门户中,您可以更改网站的配置选项(请参阅)

目前,我通过Web.Release.Config为ADO.NET Entity Framework连接设置连接字符串,但我希望通过管理门户设置连接字符串,但无论我使用什么,最终都会出现以下错误:

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

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

我是这样做的:

我去

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

Server=tcp:xxxxx.database.windows.net,1433;数据库=xxxxx;使用者 身份证=xxxxx@xxxxx;密码=xxxxx;可信连接=False;加密=真;联系 超时=30

这个有效

我有实体框架连接的另一个键。让我们称之为FooBarContext。看起来是这样的:

元数据=res:///Models.FooBarContext.csdl|res:///Models.FooBarContext.ssdl|res://*/Models.FooBarContext.msl;provider=System.Data.SqlClient;供应商 连接 string=“Server=tcp:fooserver.database.windows.net,1433;database=foobar;User 身份证=myname@fooserver;Password=xxxxxxxxx;Trusted_Connection=False;Encrypt=True;Connection 超时=30;”

这会导致上述错误。它是从Web.Release.Config中的working值复制的,带有“替换为”


我尝试过其他变体:使用“未触及,最后附加元数据,但没有效果。我用第二个网站重现了这个问题。

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

[编辑]来自以下@matthew Stiples的流行评论:

我想补充一点,其他任何人都有同样的问题,那就是 有时,配置文件将使用
而不是
,并且Azure 网站需要将这些更改为


我也遇到了同样的问题。我解决了,在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" />

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


English bad…=)

我不仅必须使用双引号(或单引号)而不是
(并为类型选择Custom),而且还必须确保我的转换配置中有一个伪值。我正在替换整个ConnectionString节点,但决定保留该节点并添加以下内容:

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

如果没有此选项,我会出现以下错误:

应用程序配置文件中的连接字符串“FooberEntities”不包含所需的providerName属性。

替换

&quot;

"

在连接字符串中。

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

  • 您应该将“name=”从“name=connectionString”中删除 在构造函数中:
  • 公共MyEntities(字符串连接字符串) :base($“name={connectionString}”) { }

  • 您应该在app.config中保留连接字符串的“副本”,但是 用伪文本替换连接字符串,正确的连接字符串 将从Azure加载。这是providerName部件所需的。 请阅读:

  • 首先检查是否在
    ConfigurationManager.ConnectionString
    中看到连接字符串(即,将其写入网页)。该名称应出现在
    web.config
    中,Azure WS将用门户中定义的值替换它(如果不存在该名称,则不会添加新名称)。双引号
    可以通过门户正常工作,您不必处理它。@cincura.net我已经运行了以下测试:将web.config中的值设置为“[在manage.windowsazure.com上设置]“。当我从System.Configuration.ConfigurationManager.ConnectionString部署并写出值时,它们将被通过manage.windowsazure.com设置的值替换。因此,该机制可以工作,但问题仍然是EF连接字符串的格式无法识别。@cincura.net您是否有一个通过manage.windowsazure.com设置的工作EF连接字符串的(匿名)示例?对于其他有相同问题的人,我想补充的是,有时配置文件会“而不是”,Azure网站需要将这些更改为“亲爱的上帝,这给我带来了几个小时的睡眠,我身上的啤酒,所有你能喝的,弗兰克和马修,无论你们何时访问圣地亚哥!!我不敢相信我刚刚遇到了这个问题,搜索了这个问题,发现我自己的评论是需要修复的!但是,伙计们,那么你们在哪里指定提供者呢?对于我们来说,这听起来是一个好的实践,我们从发布版
    Web.config
    中去掉了开发连接字符串,因此它完全没有任何连接信息。然后,我们在面板中的每个部署插槽中配置它;除了我们需要一个定制的提供者外,它工作得很好。我假设它适用于所有人,因为开发信息部署到生产服务器,然后覆盖连接字符串,但不覆盖提供程序名称。这是对的吗?@t我看到这里没有人回答你,我想你把事情弄糊涂了——ProviderName在很多情况下不是特定于开发的。您要做的是创建一个Web.Release.Config,其中包含XDT转换。你可以在网上查询,这里有一个我们在生产中使用的转换示例:这个