如何通过 Windows Azure(预览版)管理门户设置 ADO.NET Entity Framework 连接字符串?

Posted

技术标签:

【中文标题】如何通过 Windows Azure(预览版)管理门户设置 ADO.NET Entity Framework 连接字符串?【英文标题】:How do I set an ADO.NET Entity Framework connection string via the Windows Azure (Preview) Management Portal? 【发布时间】:2013-01-05 18:05:23 【问题描述】:

在 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;Encrypt=True;Connection 超时=30;

这个有效。

我有另一个用于实体框架连接的密钥。我们称它为 FooBarContext。它看起来像这样:

metadata=res:///Models.FooBarContext.csdl|res:///Models.FooBarContext.ssdl|res://*/Models.FooBarContext.msl;provider=System。 Data.SqlClient;提供者 联系 string="服务器=tcp:fooserver.database.windows.net,1433;数据库=foobar;用户 ID=myname@fooserver;密码=xxxxxxxxxx;Trusted_Connection=False;Encrypt=True;Connection 超时=30;"

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

我尝试了其他变体:使用 "原封不动,最后附加了元数据,但无济于事。我已经用第二个网站重现了这个问题。

【问题讨论】:

首先检查是否看到ConfigurationManager.ConnectionStrings中的连接字符串(即写入网页)。该名称应该出现在web.config 中,Azure WS 会将其替换为门户中定义的值(如果不存在则不会添加新值)。双引号 " 通过门户可以正常工作,您不必处理它。 @cincura.net 我已经运行了以下测试:将 web.config 中的值设置为“[SET ON manage.windowsazure.com]”。当我部署并写出 System.Configuration.ConfigurationManager.ConnectionStrings 中的值时,它们将替换为通过 manage.windowsazure.com 设置的值。所以机制起作用了,但问题仍然是EF连接字符串的格式无法识别。 @cincura.net 您是否有通过 manage.windowsazure.com 设置的有效 EF 连接字符串的(匿名)示例? 【参考方案1】:

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

[编辑] 来自以下@matthew-steeples 的热门评论:

对于遇到相同问题的其他人,我想补充的是 有时配置文件会有" 而不是",而Azure 网站需要改成"

【讨论】:

对于遇到相同问题的其他人,我要补充的是,有时配置文件会有“”而不是 ",Azure 网站需要将其更改为 " 亲爱的耶稣,这只是让我睡了几个小时,啤酒在我身上,你可以喝的,在你们访问圣地亚哥的任何时候给弗兰克和马修! 我不敢相信我刚刚遇到了这个问题,搜索了这个问题,发现我自己的评论是需要修复的东西! 但是,伙计们,您在哪里指定提供者?正如对我们来说听起来不错的做法一样,我们从版本Web.config 中删除了开发连接字符串,因此完全没有任何连接信息。然后,我们在面板中为每个部署槽配置它;除非我们需要自定义提供程序,否则效果很好。我认为它适用于你们所有人,因为开发信息已部署到生产服务器,然后连接字符串被覆盖,但不是提供者名称。这是正确的吗? @tne 我看到这里没有人回答你,我认为你在混淆事情——在许多情况下,ProviderName 并不是特定于开发的。您要做的是创建一个包含 XDT 转换的 Web.Release.Config。您可以在线查找,这是我们在生产中使用的转换示例: 这会将 connectionString 替换为单词“dummy”和 azure 覆盖。【参考方案2】:

我遇到了同样的问题。我解决了,把这个连接字符串放在 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 中添加的连接字符串。

英语不好... =)

【讨论】:

【参考方案3】:

我不仅必须使用双引号(或单引号)而不是 &amp;quot;(并为类型选择自定义),而且我还必须确保我的转换配置中有一个虚拟值。我正在替换整个 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.

【讨论】:

【参考方案4】:

替换

&quot;

"

在连接字符串中。

【讨论】:

请记住,这篇文章已经有几年历史了。我只是尝试了双引号而不是 "它确实有效。【参考方案5】:

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

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

公共我的实体(字符串连接字符串) : 基础($"name=connectionString")

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

【讨论】:

以上是关于如何通过 Windows Azure(预览版)管理门户设置 ADO.NET Entity Framework 连接字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何登陆Windows Azure的入口网站

如何登陆Windows Azure的入口网站

如何确定 Azure VM 是 VM 角色(预览版)还是虚拟机 (GA)

微软发布Azure Stack第一个技术预览版

将 Microsoft Azure Function App 2.0 预览版绑定到 0.0.0.0

微软开源跨平台的数据(库)管理工具——Azure Data Studio