如何访问模型中的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版)不能正常工作。
答
在我的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上测试过。
1.不要使用静态,这比拥有在首位一流DI的想法2.请确保您还复制了你的appsettings.json – Tseng
我试过用非静态方法,它是一样的。还有,我复制了我的appsetting.json(整个“发布”目录)。 – JedatKinports
而你的appsettings.json真的有它的内部?它典型地使用用户机密(在项目文件夹之外使用json文件,所以它不会意外地向版本控制系统提交) – Tseng