我已经根据应用程序环境设置了我的DbContexts的连接字符串。因此,在我的Startup.cs文件中,我有以下内容:
public Startup(IHostingEnvironment env, IApplicationEnvironment app)
{
Configuration = new ConfigurationBuilder(app.ApplicationBasePath)
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json", false)
.AddEnvironmentVariables()
.Build();
}
以下是如何将此配置注入到我的DbContext中:
public MyDbContext(IConfiguration configuration)
{
Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
var connString = Configuration.Get("SqlDb:ConnectionString");
builder.UseSqlServer(connString);
}
因此,我可以随意在各种环境中使用我的项目(通过在应用或主机设置中设置ASPNET_ENV)。
但是当我运行ef migrations时(由于一些明显的原因),我无法指定HostingEnvironment,启动类会查找一个名为“config..json”的文件,因为环境名称丢失了。有没有什么方法可以绕过这个问题或者我可以做出的解决方案?目前每当我运行迁移时,我都必须在运行迁移时硬编码连接字符串。
出于兴趣,我使用dnx . ef命令从powershell运行迁移。
因此,总之,是否可能通过命令指定我的主机环境或执行任何其他类型的解决方案来在运行这些命令时指定我的环境?
Startup.cs
有一个名为ConfigureDevelopmentServices
的方法,当我使用 Kestrel 运行时,它正确地执行该方法而不是ConfigureServices
。然而,当我运行dnx ef migrations add Foo
时,它执行的是ConfigureServices
。指定--environment Development
无法解决问题。 - Micah Zoltu