如何访问模型中的connectionString?

问题描述:

如何访问我的模型中的connectionString?我正在使用Dapper。我发现的大多数解决方案都是使用EntityFramework而不是Dapper。如何访问模型中的connectionString?

这是工作我的本地机器(MacOS的)上:

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

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

不会在Linux上的Debian工作。

在我运行应用程序后,在linux上Dapper.DapperHelper.ConnectionString属性为null。

我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" 
     } 
    } 
    } 
} 

让我困扰的是,同样的代码工作在MacOS但在Debian(Linux版)不能正常工作。

+0

1.不要使用静态,这比拥有在首位一流DI的想法2.请确保您还复制了你的appsettings.json – Tseng

+0

我试过用非静态方法,它是一样的。还有,我复制了我的appsetting.json(整个“发布”目录)。 – JedatKinports

+0

而你的appsettings.json真的有它的内部?它典型地使用用户机密(在项目文件夹之外使用json文件,所以它不会意外地向版本控制系统提交) – Tseng

在我的Program.cs文件,我不得不更换此:

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(); 
} 

与此:

这是一样的:

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(); 
} 

使用声明的列表:

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

然后它在Debian Linux和macOS上工作。

这帮助我找到答案:https://joonasw.net/view/aspnet-core-2-configuration-changes

但这部分:

WebHost.CreateDefaultBuilder ASP.NET 2.0的核心提供了一个 应用程序创建一个非常典型配置一个不错的 简便方法。

而不是写这个的:

...

你可以这样写:

...

不是Debian的Linux的真实。这只适用于macOS。没有在Windows上测试过。

我还报告这个bug:https://github.com/dotnet/corefx/issues/24446