Creé una nueva aplicación web ASP.NET Core en Visual Studio 2015. También configuré una aplicación web de Azure para extraer la aplicación de GitHub y ejecutarla. Esto funciona bien, pero tengo problemas para conectarme a la base de datos en Azure.
Localmente, esto funciona y usa config.json y en el código Data:DefaultConnection:ConnectionString para la cadena de conexión.
¿Cómo puedo dejar el código como está y hacer que funcione también en Azure? Intenté establecer la configuración de la aplicación en el portal, tanto las cadenas de conexión como la configuración de la aplicación. Y usando tanto "SQLCONNSTR_DefaultConnection" como "Data:DefaultConnection:ConnectionString" como clave.
(La configuración de la aplicación no parece funcionar por cierto. Creo que el valor que proporciono es demasiado largo).
Entonces, ¿cómo puedo proporcionar la cadena de conexión de mi base de datos de Azure a mi aplicación web de Azure (ASP.NET 5) sin registrarla en el control de código fuente?
Update My Startup.cs tiene este aspecto (vea el archivo completo en GitHub ):
public Startup(IHostingEnvironment env) { var configuration = new Configuration() .AddJsonFile("config.json") .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true); if (env.IsEnvironment("Development")) { configuration.AddUserSecrets(); } configuration.AddEnvironmentVariables(); Configuration = configuration; } En el método ConfigureServices , también hay:
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings")); y, también en el método ConfigureServices :
services.AddEntityFramework() .AddSqlServer() .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])) .AddDbContext<InvoicesDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); // So this is where I want my app in Azure to use the connection string I // provide in the portalIntenté establecer la configuración de la aplicación en el portal, tanto las cadenas de conexión como la configuración de la aplicación. Y usando tanto "SQLCONNSTR_DefaultConnection" como "Data:DefaultConnection:ConnectionString" como clave.
Usted está cerca.
DefaultConnection .Configuration.Get("Data:DefaultConnection:ConnectionString") para acceder a él.timesheet_db en lugar de DefaultConnection Este es un ejemplo de mi propia aplicación de parte de horas. Mi cadena de conexión se llamó timesheet_db . Simplemente reemplace todas las instancias de esa cadena con DefaultConnection para adaptar el ejemplo a su caso de uso.

El administrador de control de servicios en línea en https://myWebAppName.scm.azurewebsites.net/Env mostrará las cadenas de conexión.

Establezca los ajustes de configuración en Startup para que las variables ambientales sobrescriban el config.json.
public IConfiguration Configuration { get; set; } public Startup() { Configuration = new Configuration() .AddJsonFile("config.json") .AddEnvironmentVariables(); <----- will cascade over config.json } Configure la base de datos en Startup .
public void ConfigureServices(IServiceCollection services) { services .AddEntityFramework() .AddSqlServer() .AddDbContext<ProjectContext>(options => { var connString = Configuration.Get("Data:timesheet_db:ConnectionString"); options.UseSqlServer(connString); }); } Por supuesto, el ejemplo usa una cadena de conexión llamada timesheet_db . Para usted, reemplace todas las instancias con su propia cadena de conexión llamada DefaultConnection y todo funcionará.
En RC2, tuve que cambiar la forma en que se leían mis cadenas de conexión para que funcionaran en Azure. En mi caso, tenía que asegurarme de que la cadena de conexión de Azure se llamara "DefaultConnection" y se accediera a ella mediante:
RC1:
{ "Data": { "DefaultConnection": { "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;" } } }Accedido por:
var conn = Configuration["Data:DefaultConnection:ConnectionString"];RC2:
{ "Data": { }, "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;" } }Accedido por:
var conn = Configuration.GetConnectionString("DefaultConnection");Tiene varias opciones para establecer su cadena de conexión. La clase de configuración predeterminada obtiene la configuración del entorno de diferentes fuentes. Puede configurar su cadena de conexión en config.production.json. o config.staging.json. Ver la clase de inicio
public Startup(IHostingEnvironment env) { // Setup configuration sources. var configuration = new Configuration() .AddJsonFile("config.json") .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true); if (env.IsEnvironment("Development")) { // This reads the configuration keys from the secret store. // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 configuration.AddUserSecrets(); } configuration.AddEnvironmentVariables(); Configuration = configuration; }