如何从命令行指定dbcontext的连接字符串

时间:2016-11-09 10:49:18

标签: entity-framework asp.net-core

我有一个包含两个项目的解决方案。一个asp.net核心和类lib dotnet.core。我只使用类lib来运行迁移。当我调用“dotnet ef database update”时,我希望能够将连接字符串从dev切换到prod。有没有干净的方法呢?

2 个答案:

答案 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