如何为应用程序和迁移使用单独的连接字符串?

时间:2018-04-03 19:16:46

标签: c# asp.net-core-2.0 ef-core-2.0

我正在尝试启动并运行带有EntityFramework Core 2.0应用程序的ASP.NET Core 2。作为其中的一部分,还希望开始使用迁移来管理数据模型更改。

这是我的appsettings.json文件,我存储连接字符串。为了简化这里,我让用户/ pwd打开了。在实际情况中,将使用加密。主要目标是使用两个单独的连接字符串。一个用于应用程序,其中用户帐户TestAppServiceAccount仅用于执行读/写(仅限DML操作)。另一个名为DbChangeServiceAccount用于应用迁移(DML + DDL操作)。

{
  "SqlServerMigrationsConnection": "Server=SqlServerInstance;Database=TestDb;User Id=DbChangeServiceAccount; Password=xyz$123;",
  "SqlServerAppConnection": "Server=SqlServerInstance;Database=TestDb;User Id=TestAppServiceAccount; Password=xyz$123;"
}

以下是我的Startup.cs的设置方法。根据我的理解,看起来应用程序和迁移将依赖于在startup.cs中传递给AddDbContext方法的相同连接字符串。

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var userServiceSqlConnection = Configuration["SqlServerAppConnection"];
            services.AddDbContext<UserContext>(optiopns => optiopns.UseSqlServer(userServiceSqlConnection));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }

只是想知道如何传递不同的连接字符串,一个纯粹用于应用程序的连接字符串,另一个用于仅应用迁移的连接字符串?

1 个答案:

答案 0 :(得分:2)

发布此问题后,我意识到,我可以利用多环境设置。 因此,对于迁移,我将有一个单独的环境,用于管理CI / CD活动。我觉得这是一个部署问题, 所以我可以简单地创建appsettings.migrations.json或类似的东西,并回退到只为应用程序和迁移使用一个连接字符串。而我的Startup.cs AddDbContext参数将保持不变。

我的appsettings.development.json看起来像

{
  "SqlServerAppConnection": "Server=SqlServerInstance;Database=TestDb;User Id=TestAppServiceAccount; Password=xyz$123;"  
}

我的appsettings.migrations.json看起来像

{
    "SqlServerAppConnection": "Server=SqlServerInstance;Database=TestDb;User Id=DbChangeServiceAccount; Password=xyz$123;"
}
来自Microsoft的

How to manage multiple environments in asp.net core有更多详细信息。