使用非硬编码的数据库连接字符串在 Azure 函数应用程序中进行实体框架迁移

问题描述 投票:0回答:1

我有一个与 EF 配合使用的 Azure 函数应用程序,我想进行数据库迁移。

数据库上下文的代码有这部分:

protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlServer(Utils.GetEnvironmentVariable("DB_ConnectionString"));

我尝试从包管理器控制台进行本地迁移,然后“DB_ConnectionString”应该来自 local.settings.json 文件。

问题是,在进行迁移时,由于某种原因无法读取环境变量,例如文件不存在。在 Visual Studio 中定期运行函数应用程序时,不会出现任何问题,并且正在读取文件中的值。另外,如果我在代码中显式创建一个

IConfiguration
并告诉它使用该文件,它也可以工作。我无法真正在代码中创建 IConfiguration,因为当函数应用程序在 Azure 中运行时,它会从其配置中读取环境变量,该环境变量的值与 local.settings.json 文件中的值不同。

如何才能使迁移能够读取 local.settings.json 文件?

azure entity-framework entity-framework-core azure-functions entity-framework-migrations
1个回答
0
投票

使用包管理器控制台或 .NET Core CLI 运行迁移时,不会使用 Azure Functions 运行时,因此不会自动读取 local.settings.json 来填充环境变量。

在运行迁移之前,您可以在操作系统中设置环境变量来模仿 Azure 中的行为:

Windows:setx DB_ConnectionString“YourLocalConnectionString” MacOS/Linux:导出 DB_ConnectionString="YourLocalConnectionString" 然后运行迁移命令。这样,代码中的 Utils.GetEnvironmentVariable("DB_ConnectionString") 调用将获取本地连接字符串。

或者,如果您的 Azure Function 项目有 launchSettings.json,您可以在那里设置环境变量。运行迁移时,EF Core 工具将遵循这些设置。

© www.soinside.com 2019 - 2024. All rights reserved.