繁体   English   中英

在 Azure Web App 中设置 EF 连接字符串

[英]Setting EF Connection String in Azure Web App

我们有一个 ASP .NET (MVC) 应用程序,并且正在使用 Entity Framework 6 连接到我们的数据库。 DbContext 以标准方式构建,它代表我们加载连接字符串。 生成的代码如下所示:

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类型,我们会收到以下运行时错误:

不支持的关键字:“数据源”。

对于SQL ServerSQL Database我们收到以下运行时错误:

不支持的关键字:“元数据”。

这看起来真的是一个简单的故事,所以我们想知道出了什么问题。

问题是转义的引号: &quot; .

web.config 中的连接字符串已转义引号,因为它们在 XML 属性中被序列化。 在 Azure 门户中输入连接字符串时,应提供未转义的原始字符串。 像这样的东西:

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

David Ebbo 的回答有助于确认环境已按您的预期设置。 在 Visual Studio 中通过向导发布时注意 .pubxml 文件也很有帮助:它也会尝试填充连接字符串。

“自定义”在这里应该是正确的。 在这种情况下,providerName 保持不变,因此如果您的配置中有System.Data.EntityClient ,则在 Azure 运行时更改它后应该保持不变。

尝试转到Kudu 控制台并单击环境以确保 conn 字符串在那里看起来正确。

如果您在 web.config 中有这一行

<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" />

在 azure 门户中添加:

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

确保(如第一个答案中所述)替换&quot; 和 ”

除了这里已经记录的答案之外,仅记录我自己的经历

这是我的最终连接字符串(为了清楚起见,在多行上)

metadata=res://*/Models.mBT.csdl|res://*/Models.mBT.ssdl|res://*/Models.mBT.msl;
provider=System.Data.SqlClient;
provider connection string="
  Data Source=tcp:myazureserver.database.windows.net,1433;
  Initial Catalog=databasename;
  User ID=z@myazureserver;
  Password=xyz"

要将“正常”连接字符串转换为 EF 接受的连接字符串:

  • 应用程序设置中的连接字符串类型必须是“其他”而不是“SQL Azure”
  • 连接字符串值自动替换 web.config 中发布的任何内容
  • 元数据名称Models.mBT.csdl (以及其他两个)来自于此:

首先, mBT是我的.edmx文件的名称

关于Model. 位,请在此处查看@leqid 的回答: MetadataException: Unable to load the specified metadata resource

您可以检查您的 obj 目录并看到这三个元数据文件位于名为Models的子文件夹中,因此您需要在前面加上Models.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM