Search code examples
c#azureconfigurationconnection-stringasp.net-core-2.2

asp.net core 2.2 is not using ConnectionString set in WebApp Azure config


I've asp.net core 2.2 apps deployed to Azure. In the Azure portal, I added a connection string for the app, but asp.net core is not picking up that one, it is using the one in appsettings.json.

What did I do to check this? I just copied the connection string I entered in Azure to the appsettings.json file (hence replacing the development version), redeployed it and it is working fine.

Any suggestions?

public class Program
{
    public static void Main(string[] args)
    {
        WebHost
            .CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build()
            .Run();
    }
}

Extract from startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
...
            services.AddDbContext<BattMobilityDbContext>(option => option.UseSqlServer(_configuration.GetConnectionString("BattMobilityDbConnection")));
...
}

Extract from appsettings.

  "ConnectionStrings": {
    "BattMobilityDbConnection": "Data Source=localhost\\SQLEXPRESS_JSL; initial catalog=BattMobility; integrated security=true"
  },

Screenshot from Azure

enter image description here


Solution

  • The solution was to add support for environmentvariables in OnConfiguring of the DbContext

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (_loggerFactory != null)
            {
                if (Debugger.IsAttached)
                {
                    optionsBuilder.UseLoggerFactory(_loggerFactory);
                }
            }
    
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                 // this was the missing part
                .AddEnvironmentVariables()
    
                .Build();
            var connectionString = configuration.GetConnectionString("xxx");
    
            optionsBuilder.UseSqlServer(connectionString);
        }