gpt4 book ai didi

asp.net-core - 在 ASP.net Core 2 MVC 应用程序中从 appSettings.json 存储/检索 ConnectionString

转载 作者:行者123 更新时间:2023-12-01 19:51:17 26 4
gpt4 key购买 nike

我正在寻找在 .net Core 2 MVC 应用程序的 appsettings.json 中存储连接字符串的最佳实践方法(就像在 MVC 5 中的 web.config 中所做的那样)。

我想使用 Dapper 而不是 EF(我找到了很多 EF 示例)。

类似这样的事情:

{
"ConnectionStrings": {
"myDatabase": "Server=.;Database=myDatabase;Trusted_Connection=true;"
},

"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}

网上肯定有很多例子吧?我找不到任何适用于 .net core 2.0 的内容。

1 和 2 之间发生了一些变化,我想确保我使用的是版本 2 的最佳实践。

我发现了这个 - 但它似乎是 .net core 1: Visual Studio 2017 - MVC Core - Part 05 - Connection String from appsettings.json

这使用键值对 appsettings - 而不是连接字符串: Read AppSettings in ASP.NET Core 2.0

同样不清楚这是 .net Core 1 还是 2:Net Core Connection String Dapper visual studio 2017

最佳答案

appsettings.json 中定义连接字符串

{
"connectionStrings": {
"appDbConnection": "..."
}
}

在启动时读取其值

如果您遵循约定并在 connectionStrings 下定义连接字符串,则可以使用扩展方法 GetConnectionString() 读取其值。

public class Startup
{
public IConfiguration Configuration { get; private set; }

public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public void ConfigureServices(IServiceCollection services)
{
// Since you said you're using Dapper, I guess you might want to
// inject IDbConnection?
services.AddTransient<IDbConnection>((sp) =>
new SqlConnection(this.Configuration.GetConnectionString("appDbConnection"))
);

// ...
}
}

在存储库中使用 IDbConnection?

public interface ISpecificationRepository
{
Specification GetById(int specificationId);
}

public SpecificationRepository : ISpecificationRepository
{
private readonly IDbConnection _dbConnection;

public SpecificationRepository(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}

public Specification GetById(int specificationId)
{
const string sql = @"SELECT * FROM [YOUR_TABLE]
WHERE Id = @specId;";

return _dbConnection
.QuerySingleOrDefault<Specification>(sql,
new { specId = specificationId });
}
}

只需要 POCO 中的连接字符串?

您可以使用Options Pattern .

  1. 定义一个与 appsettings.json 中的 JSON 对象结构完全匹配的类

    public class ConnectionStringConfig
    {
    public string AppDbConnection { get; set; }
    }
  2. 在启动时注册该配置

    public void ConfigureServices(IServiceCollection services)
    {
    // ...

    services.Configure<ConnectionStringConfig>(
    this.Configuration.GetSection("connectionStrings")
    );

    // ...
    }
  3. 在 POCO 中接收访问器

    public class YourPoco
    {
    private readonly ConnectionStringConfig _connectionStringConfig;

    public YourPoco(IOptions<ConnectionStringConfig> configAccessor)
    {
    _connectionStringConfig = configAccessor.Value;

    // Your connection string value is here:
    // _connectionStringConfig.AppDbConnection;
    }
    }

注释:

  1. 参见my sample codes了解如何在 Core 1.x 和 2.0 上从 appsettings.json 读取值。
  2. 参见how I setup如果您有超过 1 个连接字符串。

关于asp.net-core - 在 ASP.net Core 2 MVC 应用程序中从 appSettings.json 存储/检索 ConnectionString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50507382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com