¿Cómo acceder a connectionString en su modelo?

asp.net-core connection-string dapper debian sql-server-2008

Pregunta

¿Cómo puedo acceder a connectionString dentro de mi modelo? Estoy usando Dapper. La mayoría de las soluciones que encontré usaban EntityFramework y no Dapper.

Esto está funcionando en mi máquina local ( macOS ):

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    Dapper.DapperHelper.ConnectionString = Configuration["ConnectionStrings:MyConnectionString"];
}

Pero no funciona en Linux Debian .

La propiedad Dapper.DapperHelper.ConnectionString es nula en Linux después de ejecutar la aplicación.

Mi contenido del archivo appsettings.json:

{
  "ConnectionStrings": {
    "MyConnectionString": "Server=ip; Database=db_name; User Id=my_user; Password=my_password; Pooling=false;" // SQL Server Authentication
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

Lo que me molesta es que el mismo código funciona en macOS pero no funciona en Debian (Linux).

Respuesta popular

En mi archivo Program.cs tuve que reemplazar esto:

public class Program
{
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                   .UseStartup<Startup>()
                   .UseUrls("http://localhost:8888")
                   .Build();
}

con este:

public class Program
{
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((builderContext, config) =>
            {
            config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            })
            .UseStartup<Startup>()
            .UseUrls("http://localhost:8888")
            .Build();

}

que es lo mismo que:

public static IWebHost BuildWebHost(string[] args)
{
            return WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                })
                .UseStartup<Startup>()
                .UseUrls("http://localhost:8888")
                .Build();
}

Lista de declaraciones de uso:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;

Luego funcionó tanto en Debian Linux como en macOS.

Esto me ayudó a resolverlo: https://joonasw.net/view/aspnet-core-2-configuration-changes

Pero esta parte:

WebHost.CreateDefaultBuilder ASP.NET Core 2.0 ofrece un buen método de conveniencia para crear una configuración muy típica para una aplicación.

En lugar de escribir esto:

...

Puedes escribir:

...

no es cierto para Debian Linux. Esto funciona solo en macOS. No lo he probado en Windows.

También informé de esto como un error: https://github.com/dotnet/corefx/issues/24446



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é