我有一个包含两个项目的解决方案。一个asp.net核心和类lib dotnet.core。我只使用类lib来运行迁移。当我调用“dotnet ef database update”时,我希望能够将连接字符串从dev切换到prod。有没有干净的方法呢?
答案 0 :(得分:1)
如果您想根据环境类型更改连接字符串,可以使用--environment
option:
-e|--environment <environment> The environment to use. If omitted, "Development" is used.
指定它是Dev还是Prod,然后基于此覆盖连接字符串。
答案 1 :(得分:1)
如果在程序包管理器控制台中使用dotnet cli或--context命令,则可以通过传递“-c”arg来确切地告诉实体框架要更新的数据库上下文。
dotnet ef database update -c {DbContextName}
或
Update-Database --context {DbContextName}
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations
如果要在运行时根据环境更改连接字符串,可以使用
dotnet run -e|--environment {EnvironmentName}
然后在Starup.cs方法内部的configure服务方法中执行类似
的操作 public IHostingEnvironment hostingEnv;
public void ConfigureServices(IServiceCollection services)
{
if (hostingEnv.IsEnvironment("{EnvironmentName}"))
{
services.AddDbContext<DbContextName>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DbContextNameFromAppSettings.JsonFile")));
}
else
{
services.AddDbContext<DbContextName>(options =>
options.UseSqlServer(Configuration.GetConnectionString("OtherDbContextNameFromAppSettings.JsonFile")));
}
}
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments