如何运行`dotnet ef`命令来定位EF Core 2.0中的特定应用程序。[environment] .json

时间:2017-10-05 10:13:35

标签: asp.net-core entity-framework-core asp.net-core-2.0 ef-core-2.0

文档提到在2.0中没有支持传递自定义环境变量,但EF核心1.0支持--environment参数。我觉得EF Core 2.0仍然支持此功能。

目前,我正在将多个应用程序部署到同一台计算机上,但在同一台计算机上部署了不同的版本。我正在使用Puppet自动执行某些部署过程,最终使用IIS中的网站,例如Company.Project.[env]。其中env类似.dev,.test,.uat,每个都在单独的AppPool下运行等等。现在,使用ASP.NET Core 2.0,我可以应用< environmentVariable>每个已部署的aspnet核心网站的web.config,web.config中的环境变量优先于ASPNETCORE_ENVIRONMENT的任何计算机环境变量。在puppet部署期间,它会在web.config中为ASPNETCORE_ENVIRONMENT变量插入正确的值,这对我来说非常有意义,并且允许每个已部署的应用程序仍然正确引导并加载到正确的appsettings.[environment].json文件中。

现在,使用EF Core 2.0,我无法做到这一点。我计划为每个环境部署一个单独的数据库项目,并为每个已部署的包添加环境名称,就像我在网站上这样做一样,并计划以某种方式传入--environment来运行任何dotnet ef命令并使它们读取正确的appsettings.[environment].json文件,该文件具有正确定位的数据库环境连接字符串以运行迁移。

如果ASPNET核心网站支持< environmentVariable>在web.config中,允许将多个项目部署到使用唯一环境变量的同一台机器上。然后我觉得EF Core应该支持传入--environment。

由于不再支持此功能,因此在同一台计算机上多次部署应用程序的最佳方法是运行dotnet ef命令来定位特定的appsettings。[environment] .json以确保ef command使用已部署项目中的特定连接字符串,然后在该计算机上的正确数据库上运行迁移。

2 个答案:

答案 0 :(得分:1)

EF Core将支持将自定义参数传递给ef工具命令的方法。我发现有一个问题是跟踪此功能。

https://github.com/aspnet/EntityFrameworkCore/issues/8332

完成此操作后,可以将连接字符串或任何其他环境参数与ef命令一起传递。

答案 1 :(得分:0)

遵循@Konrad的建议:

在您的项目路径类型上运行的终端

export ASPNETCORE_ENVIRONMENT =生产<-或您的环境

运行该命令之后,将使用您环境的appsettings.json(appsettings.Production.json)

我当前正在使用ASP Net Core 2.2