在迁移期间使用存储在环境变量中的数据库连接字符串

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

我有一个ASP.NET Core项目,我在其中将PostgreSQL连接字符串存储在环境变量中。当我尝试进行初始迁移时,项目的构建成功,但是随后引发异常:

System.ArgumentNullException:值不能为null。 (参数'connectionString')。

因此,我认为它无法正确读取连接字符串。我像这样在ConfigureServices方法中为我的DbContext提供连接字符串:

services.AddDbContext<GoalsContext>(options =>  
  options.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_STRING")));

我也试图通过创建IDesignTimeDbContextFactory的实现来解决此问题,如下所示:

public class GoalsContextFactory : IDesignTimeDbContextFactory<GoalsContext>
{
  public GoalsContext CreateDbContext(string[] args)
  {
    var optionsBuilder = new DbContextOptionsBuilder<GoalsContext>();
    optionsBuilder.UseNpgsql(Environment.GetEnvironmentVariable("CONNECTION_STRING");

    return new GoalsContext(optionsBuilder.Options);
  }
}

任何帮助将不胜感激。

更新:我已经按照评论中的建议阅读了有关环境变量和配置的官方文档,并且通过使用一个方法创建了一个控制器来检查变量是否首先存在,该方法将返回如下连接字符串:

[HttpGet]
public string GetConnectionString()
{
  return _config["CONNECTION_STRING"];
}

并且当我启动它时,正确的连接字符串确实会显示在浏览器中,但是当我尝试向数据库中添加初始迁移时,仍然会抛出我已经提到的异常。

我还尝试注释掉我的IDesignTimeDbContextFactory实现,并在Program.cs中手动添加对.AddEnvironmentVariables方法的调用(我已自动完成读取,但我仍想尝试),但是这些都没有效果-当Entity Framework Core的迁移仍未收到连接字符串时,我的控制器仍发出连接字符串。

总之,是的,存在连接字符串,我什至可以输出它,但是由于相同的异常,迁移仍然失败。

c# asp.net-core entity-framework-core connection-string entity-framework-core-migrations
1个回答
0
投票

根据我的评论。

请参见Command Line Environment Variables

此外,如果要绕过变量的设置,则需要查看Context的OnConfiguring方法重载,并在传入的DbOptions参数上使用IsConfigured标志,以仅从文件读取当没有有效的配置传递给上下文时。

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