¿Cadena de conexión ASP.NET 5 / EF7 en web.config?

asp.net-core entity-framework-core

Pregunta

En ASP.Net 4.5 podría poner mi cadena de conexión en web.config para aprovechar las web.config transformations de web.config transformations para poder trabajar localmente con la base de datos de desarrollo y luego, cuando la publique, apuntaría a la base de datos de producción. Ahora estoy trabajando con ASP.Net 5 y EF 7, que parece utilizar el archivo config.json para almacenar cadenas de conexión en lugar de web.config . Con esta nueva forma de almacenar archivos no puedo descubrir cómo hacer algo como las web.config transformations del pasado. ¿Cómo puedo configurar config.json para hacer esto O configurarlo para que lo pueda hacer en web.config y que EF busque las cadenas?

Respuesta aceptada

La sintaxis de transformación web.config está orientada al formato XML de datos. Las nuevas configuraciones consisten en algunos archivos en formato JSON y uno puede implementar escenarios de almacenamiento de manera muy fácil.

En primer lugar, todos los soportes de ASP.NET permiten establecer el entorno de destino mediante el uso de la variable de entorno ASPNET_ENV o estableciendo Hosting:Environment en el archivo launchSettings.json (consulte la carpeta de Properties de su proyecto). El archivo launchSettings.json se puede modificar en Visual Studio en las propiedades del proyecto. Uno debe primero elegir el "Perfil"

introduzca la descripción de la imagen aquí

y hacer ajustes para cada perfil. Alternativamente, solo puede editar el archivo Properties\launchSettings.json manualmente.

Algunos archivos de configuración, como hosting.json funcionan de forma automática utilizando la puesta en escena. Por lo tanto, puede configurar, por ejemplo, diferentes puertos y diferentes enlaces de interfaz especificando server.urls en hosting.json y hosting.Development.json por ejemplo.

Para incluir la lógica de appsettings.json en appsettings.json es necesario modificar el constructor de la clase de Startup en Startup.cs . Por ejemplo:

public class Startup
{
    public static IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration["Data:ConnectionString"]);
            })
            .AddDbContext<SM9Context>(options => {
                options.UseSqlServer(Configuration["Data:SM9ConnectionString"]);
            });
    }
}

El código anterior guarda la configuración en la propiedad de Configuration y luego utiliza ConfigureServices para realizar la inyección de los contextos de las bases de datos MyContext y SM9Context . Se puede por ejemplo crear principal appsettings.json archivo con toda la configuración productiva y crear appsettings.Development.json archivo que anula sólo uno (a partir de dos Data:ConnectionString y Data:SM9ConnectionString ) cadena de conexión:

public class Startup
{
    public static IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyContext>(options => {
                options.UseSqlServer(Configuration["Data:ConnectionString"]);
            })
            .AddDbContext<SM9Context>(options => {
                options.UseSqlServer(Configuration["Data:SM9ConnectionString"]);
            });
    }
}

ASP.NET combinará ambos archivos appsettings.json y appsettings.Development.json para crear el conjunto completo de parámetros de configuración.

El artículo y la parte de la documentación describen cómo se puede usar la puesta en escena en ASP.NET 5.


Respuesta popular

Puede hacer algo como esto para extraer configuraciones de diferentes archivos * .json, a continuación se basan en el entorno o en variables de entorno;

var builder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    .AddEnvironmentVariables();

También puede utilizar el administrador secreto ASPNET.

Cada vez que se accede a una configuración, se anulará la configuración de los valores de configuración que tenga, lo que significa que la variable reflejará lo que se estableció para durar.

Echa un vistazo a los documentos de configuración .




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué