Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add DbContext based on environment in ASP.net Core

This is how I am currently adding my DbContext in my ConfigureServices method in Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    .....

    services.AddDbContext<MyDbContext>(options =>
        options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));

    .....

}

And my connection string is stored in my appsettings.json file, like this for example:

{
    ....
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;user id=root;password=root;database=mydb;sslmode=none"
  }

  ....

}

If I want to switch which database is being connected, how do I make the "services.AddDbContext()" switch the database if it is "Development" vs. "Production" environments?

like image 716
big_water Avatar asked Dec 21 '16 16:12

big_water


1 Answers

You can configure different environment connection strings in different appsettings files like this-

For test environment, use appsettings.test.json

 "Data": {
    "MyDbContext": {
      "ConnectionString": "" /*<<== TestDatabase connection string */
    },

For prod environment, use appsettings.prod.json

 "Data": {
    "MyContext": {
      "ConnectionString": "" /*<<== ProdDatabase connection string */
    },

Use ASPNETCORE_ENVIRONMENT environment variable to set current environment as Test or Prod values.

In Startup, you can use like this-

     services.AddDbContext<MyContext>(options =>
options.UseSqlServer(Configuration["Data:MyContext:ConnectionString"]));
like image 101
Sanket Avatar answered Sep 23 '22 14:09

Sanket