如何在 Azure 的 ConfigurationManager.ConnectionStrings 上使用 ConnectionStrings 创建 EF 迁移?
Posted
技术标签:
【中文标题】如何在 Azure 的 ConfigurationManager.ConnectionStrings 上使用 ConnectionStrings 创建 EF 迁移?【英文标题】:How to create EF migrations with ConnectionStrings on Azure's ConfigurationManager.ConnectionStrings? 【发布时间】:2021-01-10 18:51:34 【问题描述】:我们最近从dev
的本地服务器和prod
的云上私有服务器迁移到 Azure,我们有不同的插槽 (dev
/staging
/prod
) 和 SQL Azure也是。
在我需要创建新的迁移之前,一切都运行良好。我们使用的是 Code First EF6,因此,为了创建迁移,我在控制台包管理员窗口中键入 add-migration Whatever099BriefDescription
命令。
我立即得到一个NullReferenceException
指的是连接字符串。我们有一个 ConnectionStringFactory
类,我们曾经有一个 #if DEBUG#
返回从 Web.Config
抓取的正确连接字符串。
public static class ConnectionStringFactory
public static string GetConnectionString()
//USED JUST FOR CREATING MIGRATIONS
//#if DEBUG
// return @"Data Source = SQLSERVER\LANSERVER; Initial Catalog = Project; user id = Project; password = asdf; MultipleActiveResultSets = true";
//#endif
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Project"].ConnectionString;
return connectionString;
由于我们实际使用的是 Azure 的配置连接字符串(在 Azure 门户面板上),我们的 web.config
没有定义连接字符串。所以当然NullReferenceException
是完全有道理的,因为它试图从一个无法抓取的地方获取该字符串。
我终于可以再次使用 #if DEBUG#
注释创建迁移,提供硬编码的连接字符串,当然之后删除它。
这似乎是一种“奇怪”的行为,或者至少不是最佳行为。您能否分享有关如何创建 EF 迁移而不需要临时硬编码连接字符串的任何建议,以便可以“以某种方式”实现从 Azure 获取它?
【问题讨论】:
【参考方案1】:关于这个问题,我认为你可以从 Azure 下载连接字符串,将连接字符串设置为环境变量,然后运行命令add-migration
。关于如何从Azure获取连接字符串,请参考here。
【讨论】:
以上是关于如何在 Azure 的 ConfigurationManager.ConnectionStrings 上使用 ConnectionStrings 创建 EF 迁移?的主要内容,如果未能解决你的问题,请参考以下文章
Azure 静态 Web 应用 Blazor WASM .Net Core API 和标识 - 无法从“_configuration”加载设置
配置中心 App Configuration :配置的动态更新
Azure B2C:无法从 v2.0 .well-known openid-configuration 检索文档