Saltar al contenido

Obtenga ConnectionString de appsettings.json en lugar de estar codificado en la aplicación .NET Core 2.0

Posteriormente a consultar con expertos en esta materia, programadores de diversas áreas y maestros hemos dado con la respuesta al dilema y la plasmamos en esta publicación.

Solución:

PASO 1: Incluya lo siguiente en OnConfiguring()

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();
        optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
    

PASO 2: Crear appsettings.json:

  
    "ConnectionStrings":        
      "DefaultConnection": "Server=YOURSERVERNAME; Database=YOURDATABASENAME; Trusted_Connection=True; MultipleActiveResultSets=true"        
     
  

PASO 3: Copie appsettings.json en el directorio correcto

  Hard copy appsettings.json.config to the directory specified in the AppDomain.CurrentDomain.BaseDirectory directory. 
  Use your debugger to find out which directory that is.        

Suposición: ya ha incluido el paquete Microsoft.Extensions.Configuration.Json (obténgalo de Nuget) en su proyecto.

En ASPNET Core lo haces en Startup.cs

public void ConfigureServices(IServiceCollection services)

    services.AddDbContext(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));

donde se define su conexión en appsettings.json


  "ConnectionStrings": 
    "BloggingDatabase": "..."
  ,

Ejemplo de documentos de MS

Entiendo que esto se ha marcado como respondido, pero me encontré con un pequeño problema cuando estaba trabajando en un proyecto en el que tengo mi Capa de acceso a datos de EF Core en un proyecto .DLL separado del resto de mi proyecto, API, Auth y Web y, en su mayoría, me gustará que mis otros proyectos hagan referencia a este proyecto de datos. Y no quiero entrar en el proyecto de datos para cambiar las cadenas de conexión cada vez.

PASO 1: Incluya esto en el método OnConfiguring

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
      
           var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
           IConfigurationRoot configuration = new ConfigurationBuilder()
                **.SetBasePath(Path.Combine(Directory.GetCurrentDirectory()))**
                .AddJsonFile("appsettings.json", optional: false)
                .AddJsonFile($"appsettings.envName.json", optional: false)
                .Build();
           optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
      

NOTA: .SetBasePath(Path.Combine(Directory.GetCurrentDirectory()))
Esto negará o invalidará la necesidad de copiar el archivo a un directorio, ya que ASP.NET CORE es lo suficientemente inteligente como para elegir el archivo correcto. Además, el entorno especificado elegirá el archivo correcto cuando se construya para lanzamiento o producción, suponiendo que se seleccione el archivo de entorno Prod.

PASO 2: Crear appsettings.json


"ConnectionStrings":        
  "DefaultConnection": "Server=YOURSERVERNAME; Database=YOURDATABASENAME; Trusted_Connection=True; MultipleActiveResultSets=true"        
 

POR FAVOR: Referencia: Microsoft.Extensions.Configuration

valoraciones y comentarios

Eres capaz de añadir valor a nuestra información asistiendo con tu experiencia en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *