如何在 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 函数方法中使用 JWT 验证?

Azure 静态 Web 应用 Blazor WASM .Net Core API 和标识 - 无法从“_configuration”加载设置

配置中心 App Configuration :配置的动态更新

Azure B2C:无法从 v2.0 .well-known openid-configuration 检索文档

ASP.NET Core 2 - 多个 Azure Redis 缓存服务 DI

Azure 在使用 IConfigurationBuilder.Build 时出现 HTTP 500 错误