Azure函数应用程序中的实体框架迁移,使用非硬编码的db连接字符串

fnx2tebb  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(92)

我有一个与EF一起工作的Azure函数应用程序,我想进行数据库迁移。
db上下文的代码包含以下部分:

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

字符串
我尝试从包管理器控制台进行本地迁移,然后"DB_ConnectionString"应该来自local.settings.json文件。
问题是,在执行迁移时,由于某些原因,例如文件不存在,env var没有被读取。在Visual Studio中定期运行函数应用程序时,没有问题,并且正在读取文件中的值。
此外,如果我在代码中显式创建一个IConfiguration并告诉它使用该文件,它也可以工作。我不能真正在代码中创建IConfiguration,因为当函数应用程序在Azure中运行时,它从其配置中读取env var,该配置的值与local.settings.json文件中的值不同。
要使迁移能够读取local.settings.json文件,可以执行哪些操作?

qmelpv7a

qmelpv7a1#

使用包管理器控制台或.NET Core CLI运行迁移时,未使用Azure Functions运行时,因此不会自动读取local.settings.json来填充环境变量。
在运行迁移之前,您可以在操作系统中设置一个环境变量,以模拟Azure中的行为:
Windows:setx DB_ConnectionString“YourLocalConnectionString”MacOS/Linux:export DB_ConnectionString=“YourLocalConnectionString”然后运行迁移命令。这样,代码中的Utils.GetEnvironmentVariable(“DB_ConnectionString”)调用将获取本地连接字符串。
或者,如果您的Azure Function项目有launchSettings.json,您可以在其中设置环境变量。EF Core工具在运行迁移时将遵守这些设置。

相关问题