Obtenga cadenas de conexión múltiples en appsettings.json sin EF

asp.net-core asp.net-core-mvc asp.net-mvc dapper

Pregunta

Empecé a jugar con .Net Core RC2 migrando una aplicación actual de MVC .Net que desarrollé. Me parece a mí por la forma en que se maneja la configuración con appsettings.json que si tengo varias cadenas de conexión, o bien tengo que usar EF para recuperar una conexión o tengo que crear clases separadas nombradas para cada cadena de conexión. Todos los ejemplos que veo utilizan EF (que no tiene sentido para mí ya que usaré Dapper) o el ejemplo crea una clase con el nombre de la sección en la configuración. ¿Me estoy perdiendo una mejor solución?

    "Data": {
        "Server1": {
          "ConnectionString": "data source={server1};initial catalog=master;integrated security=True;"
        },
        "Server2": {
          "ConnectionString": "data source={server2};initial catalog=master;integrated security=True;"
        }
    }

¿Por qué querría crear dos clases, una llamada "Servidor1" y otra "Servidor2" si la única propiedad que cada uno tenía era una conexión?

Respuesta popular

Hay un par de correcciones que hice a la respuesta de Adem para trabajar con RC2, así que pensé que sería mejor publicarlas.

Configuré el appsettings.json y creé una clase como la de Adem

{
    "ConnectionStrings": {
      "DefaultConnectionString": "Default",
      "CustomConnectionString": "Custom"
    }
}

y

public class ConnectionStrings
{
    public string DefaultConnectionString { get; set; }

    public string CustomConnectionString { get; set; }
}

la mayor parte del código de Adem sale de la caja en VS para RC2, así que acabo de agregar la siguiente línea al método ConfigureServices

services.Configure<Models.ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));

El principal punto que falta es que la cadena de conexión debe pasarse al controlador (una vez que haya especificado un objeto de configuración fuertemente tipado y lo haya agregado a la colección de servicios, puede solicitarlo desde cualquier controlador o método de acción solicitando un instancia de IOptions, https://docs.asp.net/en/latest/mvc/controllers/dependency-injection.html )

Entonces esto va al controlador,

private readonly ConnectionStrings _connectionStrings;
        public HomeController(IOptions<ConnectionStrings> connectionStrings)
        {
            _connectionStrings = connectionStrings.Value;
        }

y luego cuando instancia el DAL, pasa la conexión apropiada.

DAL.DataMethods dm = new DAL.DataMethods(_connectionStrings.CustomConnectionString);

Todos los ejemplos muestran esto, simplemente no lo dicen, por qué mis intentos de sacar directamente del DAL no funcionaron



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é