.NET Core 配置系统与 Entity Framework Core 集成

在现代软件开发中,配置管理是一个关键组成部分。随着应用程序的复杂性增加,传统的配置文件(如JSON、XML、INI等)可能不足以满足需求。为了解决这个问题,.NET Core提供了强大的配置系统,支持从多种来源获取配置数据,包括环境变量、命令行参数等。然而,对于需要将配置数据存储在数据库中的场景,.NET Core 原生并不支持 Entity Framework。幸运的是,现在有了 Configuration.EntityFramework,这是一个为 .NET Core 配置系统设计的自定义配置提供程序,它基于Entity Framework Core,允许将配置设置存储在各种数据库中。

Configuration.EntityFramework 的优势

使用 Configuration.EntityFramework 可以带来以下优势:

  • 利用.NET Core配置提供程序模型。
  • 支持复杂类型。
  • 使用 Options 模式以强类型方式访问设置。
  • 增强的配置管理和变更控制,尤其适用于分布式环境。
  • 对整个环境的设置进行事务性更新。
  • 支持单点更改,多个应用程序可以共享公共设置。
  • 减少对多个配置文件的依赖,通过数据库持久化设置,可以减少配置文件的维护工作。
  • 可以通过单个查询检索特定标准(如环境、应用程序或部分)的所有设置。
  • 允许最终用户通过 Entity Framework 上下文更新设置。

使用场景

Configuration.EntityFramework 有多种使用场景,以下是一些示例:

在企业系统中,软件堆栈可能由多个部分组成,例如 Windows 服务、Web 应用程序、Web API 和桌面应用程序。每个部分可能都有自己的配置文件,需要部署和维护。使用 Configuration.EntityFramework,可以集中存储和维护这些部分的设置,减少软件部署、升级和频繁或偶尔的配置更改所带来的努力和风险。

在分布式解决方案中,配置文件将存在于多个服务器上。在集群环境中,相同的配置文件可能会在许多服务器上复制,所有这些服务器都可能是相同的。使用 Configuration.EntityFramework,可以从单一的真实来源管理设置,但可以被任何资源使用。

配置文件可能会给发布管理过程增加额外的复杂性。在添加、删除或修改设置时,需要考虑许多变量,包括版本控制、自上次部署以来设置是否已被客户端修改以及是否需要条件合并等。

代码使用

开始使用 Configuration.EntityFramework 非常简单:

  1. 安装最新的 Nuget 包。
  2. 创建与 EntityFrameworkCore 和 ConfigurationContext 兼容的存储库。
  3. 将设置添加到存储库中。
  4. 使用 IConfiguration 实例注册并初始化 Configuration.EntityFramework 提供程序。这是通过在 ConfigurationBuilder 上调用 AddEntityFrameworkConfig 扩展方法来完成的。

以下是使用 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" } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485