65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Framework & .NET Core 的 EntityFramework 配置提供程序

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2016 年 10 月 21 日

CPOL

4分钟阅读

viewsIcon

22913

Configuration.EntityFramework 是一个基于 EntityFrameworkCore 构建的 .NET Core 配置系统的自定义配置提供程序。

Configuration.EntityFrameworkonfiguration.EntityFramework

引言

.NET Core 支持多种不同的配置选项。应用程序配置数据可以来自文件(内置支持 JSON、XML 和 INI 格式),也可以来自环境变量、命令行参数,甚至内存集合。那么为什么没有对 EntityFramework 的支持呢?现在有了!

Configuration.EntityFramework.NET Core 配置系统 的一个自定义配置提供程序。它构建于 EntityFrameworkCore 之上,允许将配置设置存储在各种 存储库 中。

某些设置,例如连接字符串或应用程序初始化期间所需的设置,可能更适合放在本地文件而不是存储库中。然而,在许多情况下,Configuration.EntityFramework 可以提供一些显著的优势,包括:

  1. 利用 .NET Core 配置提供程序模型,
  2. 支持复杂类型,
  3. 使用 Options 模式 以强类型方式访问设置,
  4. 增强的配置管理和变更控制。这在分布式环境中尤其重要,
  5. 对整个环境的设置进行事务性更新,
  6. 通用设置可以被许多应用程序共享。支持单点更改,
  7. 在一个包含许多相关应用程序或服务的复杂系统中,拥有许多配置文件并不少见。通过将设置持久化到数据库,可以减少对这些配置文件的依赖,
  8. 可以检索所有符合特定条件(例如环境、应用程序或部分)的设置,只需一次查询,
  9. 允许最终用户通过 EntityFramework Context 更新设置。

背景

采用 Configuration.EntityFramework 的一些用例

使用 Configuration.EntityFramework 并将设置持久化到数据库有很多引人注目的用例。但是,这里我们只介绍其中的几个。

深度软件栈

在许多情况下,尤其是在企业系统中,软件栈可能由许多部分组成,例如 Windows 服务、Web 应用程序、Web API 和桌面应用程序。这些部分中的每一部分很可能都有自己的配置文件,这些配置文件必须进行部署和维护。使用 Configuration.EntityFramework,可以集中存储和维护与这些部分相关的设置,从而减少软件部署、升级和频繁或偶尔的配置更改相关的 effort 和风险。

分布式解决方案

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

发布管理

配置文件会为发布管理过程增加额外的复杂性。在添加、删除或修改设置时,需要考虑许多变量,包括:

  • 版本控制
  • 自上次部署以来,设置是否已被客户修改?
  • 是否需要有条件合并?

由于 Configuration.EntityFramework 利用 EntityFrameworkCore 将配置设置持久化到关系数据库,因此可以通过多种方式管理配置数据,包括脚本或通过 EF ConfigurationContext

原子更新

当存在许多配置文件,可能位于许多服务器上时,维护这些文件的完整性至关重要。要更改单个设置,必须进行经过深思熟虑的备份和恢复策略(恢复计划)。然而,通过将这些设置持久化到数据库,可以大大减少所涉及的后勤工作和进行更改所需的系统停机时间。

Using the Code

入门非常简单。

步骤 1

安装最新的 Nuget 包

第二步

创建与 EntityFrameworkCoreConfigurationContext 兼容的存储库

步骤 3

将您的设置添加到存储库

步骤 4

通过调用 ConfigurationBuilder 上的 AddEntityFrameworkConfig 扩展方法,将 Configuration.EntityFramework 提供程序注册并初始化到 IConfiguration 实例。 this.

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();

快速入门

完成步骤 1-4 后,您就可以开始访问您的设置了。

以下代码片段提供了通过 ConfigurationBuilder.Build() 方法返回的 IConfiguration 实例检索设置的示例代码。

检查配置部分是否存在。

var exists = config.SectionExists("SampleSection");

获取复杂类型的配置部分。如果部分不存在,则返回 null。

var section = config.TryGetSection<ComplexType>("SampleSection");

获取复杂类型的配置部分。如果部分不存在,则返回默认值。

var section = config.GetSection<ComplexType>("SampleSection");

获取键的配置值。

var setting = config.GetValue<string>("TestSetting");

配置连接字符串

由于 Configuration.EntityFramework 提供程序正在检索持久化到数据库的设置,因此需要 ConnectionString。此 ConnectionString 可以通过 DbContextOptionBuilder 进行配置,如下面的示例所示。

var config = new ConfigurationBuilder()
   .AddEntityFrameworkConfig(builder => 
    builder.UseSqlServer(@"Data Source=.;Initial Catalog=Configuration;Integrated Security=True"))
   .Build();

或者,可以将 ConnectionString 添加到本地配置设置中。对于 .xproj 项目,这意味着 appsettings.json 文件。

{
  "ConnectionStrings": {
    "ConfigurationContext": "Data Source=.;Initial Catalog=Configuration.Samples;
     Integrated Security=True"
  }
}

关注点

访问我们的 wiki 以获取更多信息,包括:

  1. 数据库架构
  2. 领域模型
  3. 如何创建存储库
  4. 如何向存储库添加设置
  5. 如何获取应用程序的设置
  6. 如何入门
  7. 常见用例

GitHub 下载最新的示例代码。

历史

  • 2016 年 10 月 21 日:初始版本
EntityFramework .NET Framework & .NET Core 配置提供程序 - CodeProject - 代码之家
© . All rights reserved.