none
Cambio de conexión a SQL, de forma dinámica en .Net Core 2.x RRS feed

  • Pregunta

  • estoy haciendo un desarrollo en .Net Core el cual despues del login de usuario debe mostrar una lista de empresas (las cuales esta relacionada a una base de datos cada una), al seleccionar una empresa esta debe cambiar la conexión a una bd de acuerdo al registro seleccionado.

    Mi duda es como puedo hacer que se cambie la conexión de "DefaultConnection" a otra base de datos?

    He logrado que se cambie la conexión pasandole como parámetro otra cadena que configure en el appsetings.json pero todo esto de forma manual, no se como puedo invocar desde mi controlador a ConfigureServices.

    en el appsettings.json lo tengo de la siguiente forma:

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=EQUIPO-COGNITIV;Database=SEQTOR_Analitycs_N1;Trusted_Connection=True;MultipleActiveResultSets=true",
        "CrConnection":  "Server=EQUIPO-COGNITIV;Database=SEQTOR_Cr;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "AllowedHosts": "*"
    }

    En el ConfigureService puedo usar una cadena dependiendo de una u otra conexión

    string connection = Configuration.GetConnectionString("DefaultConnection");
    
                services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(connection));

    Y si quisiera usar una conexión alternativa fija lo haría de esta forma, tambien en ConfigureService:

    services.AddDbContext<CrDbContext>(options =>
                    options.UseSqlServer(
                    Configuration.GetConnectionString("CrConnection")));

    Pero lo que necesito es que sea mas dinámica y establecerla desde un método de mi controlador ya que podre crear tantas bases de datos se necesiten a futuro y la idea es administrar esto por base de datos y no estar cambiando tanto código cada vez que se agregue una nueva empresa.

    Muchas gracias de antemano.


    C. Zapata

    jueves, 20 de junio de 2019 21:48

Todas las respuestas

  • Hola CAZA -, 

    Mi recomendación seria en la de crear un vector para que este pueda crecer dinámicamente conforme a tus necesidades de crear nuevas DB, considera el uso de memoria, pero para aclararte la forma en que debería de ser esta seria con una colección de Strings que contendrías en un método como el de abajo.

    <connectionStrings>
      <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031.mdf" providerName="System.Data.SqlClient" />
      <add name="MovieDBContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" providerName="System.Data.SqlClient" />
    </connectionStrings>
    Gracias por usar los foros de MSDN.
    Erick Rivera
     ____
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    viernes, 5 de julio de 2019 15:08