在现代软件开发中,配置管理是一个关键组成部分。随着应用程序的复杂性增加,传统的配置文件(如JSON、XML、INI等)可能不足以满足需求。为了解决这个问题,.NET Core提供了强大的配置系统,支持从多种来源获取配置数据,包括环境变量、命令行参数等。然而,对于需要将配置数据存储在数据库中的场景,.NET Core 原生并不支持 Entity Framework。幸运的是,现在有了 Configuration.EntityFramework,这是一个为 .NET Core 配置系统设计的自定义配置提供程序,它基于Entity Framework Core,允许将配置设置存储在各种数据库中。
使用 Configuration.EntityFramework 可以带来以下优势:
Configuration.EntityFramework 有多种使用场景,以下是一些示例:
在企业系统中,软件堆栈可能由多个部分组成,例如 Windows 服务、Web 应用程序、Web API 和桌面应用程序。每个部分可能都有自己的配置文件,需要部署和维护。使用 Configuration.EntityFramework,可以集中存储和维护这些部分的设置,减少软件部署、升级和频繁或偶尔的配置更改所带来的努力和风险。
在分布式解决方案中,配置文件将存在于多个服务器上。在集群环境中,相同的配置文件可能会在许多服务器上复制,所有这些服务器都可能是相同的。使用 Configuration.EntityFramework,可以从单一的真实来源管理设置,但可以被任何资源使用。
配置文件可能会给发布管理过程增加额外的复杂性。在添加、删除或修改设置时,需要考虑许多变量,包括版本控制、自上次部署以来设置是否已被客户端修改以及是否需要条件合并等。
开始使用 Configuration.EntityFramework 非常简单:
以下是使用 IConfiguration 实例检索设置的示例代码,该实例由 ConfigurationBuilder.Build() 方法返回。
var config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile(
"appsettings.json",
true,
true
)
.AddEntityFrameworkConfig(builder => builder.UseSqlServer(
"Data Source=.;Initial Catalog=Configuration;Integrated Security=True"
))
.Build();
var exists = config.SectionExists("SampleSection");
var section = config.TryGetSection("SampleSection");
var section = config.GetSection("SampleSection");
var setting = config.GetValue("TestSetting");
由于 Configuration.EntityFramework 提供程序是从数据库中检索设置,因此需要连接字符串。这个连接字符串可以通过 DbContextOptionBuilder 配置,如下所示:
var config = new ConfigurationBuilder()
.AddEntityFrameworkConfig(builder =>
builder.UseSqlServer(
"Data Source=.;Initial Catalog=Configuration;Integrated Security=True"
))
.Build();
或者,可以将连接字符串添加到本地配置设置中。对于 .xproj 项目,这意味着 appsettings.json 文件。
{
"ConnectionStrings": {
"ConfigurationContext": "Data Source=.;Initial Catalog=Configuration.Samples;Integrated Security=True"
}
}