1

如何訪問我的模型中的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

回答

0

在我的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