# EF Core 核心包
Air.Cloud.EntityFrameWork.Core 是 Air.Cloud 的 EF Core 数据访问基础包,提供 DbContext 注册、仓储、SQL 仓储、连接字符串解析、数据库状态检查和 EF Core 模型元数据扩展。
# 安装
<PackageReference Include="Air.Cloud.EntityFrameWork.Core" Version="10.0.2" />
Provider 包会引用核心包;业务项目通常还需要引用一个具体数据库 Provider 包。
# 连接配置
配置节点为 DataSourceSettings:
{
"DataSourceSettings": {
"ConnectionValidationSQL": "select 1",
"ConnectionValidationIntervalMillis": 60000,
"ConnectionStrings": {
"default": "Server=127.0.0.1;Database=air_cloud;User Id=root;Password=your-password;"
}
}
}
| 配置项 | 说明 |
|---|---|
ConnectionValidationSQL | 数据库状态检查 SQL。为空时不启用状态检查后台服务 |
ConnectionValidationIntervalMillis | 状态检查间隔,单位毫秒 |
ConnectionStrings | 命名连接字符串集合 |
# 注册 DbContext
using Air.Cloud.EntityFrameWork.Core.Extensions.DatabaseProvider;
using Microsoft.EntityFrameworkCore;
public sealed class DefaultDbContext : DbContext
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options)
: base(options)
{
}
}
services.AddDb<DefaultDbContext>(connectionMetadata: "default");
连接池版本:
services.AddDbPool<DefaultDbContext>(
connectionMetadata: "default",
poolSize: 128);
多 DbContext 定位器:
public sealed class ReportingDbContextLocator : IDbContextLocator
{
}
services.AddDb<ReportingDbContext, ReportingDbContextLocator>(
connectionMetadata: "reporting");
# 仓储入口
var repository = Db.GetRepository<OrderEntity>();
var dbRepository = Db.GetDbRepository<MasterDbContextLocator>();
var sqlRepository = Db.GetSqlRepository<MasterDbContextLocator>();
# 模型元数据扩展
核心包提供 IColumnMetadataProvider,用于在 EF Core OnModelCreating 阶段统一改列类型、列名等关系型元数据。详见 列元数据提供器。
# 注意事项
- 核心包不绑定具体数据库;必须引入一个 Provider 包,或手动注册
IDatabaseConfigure。 AddDb/AddDbPool会通过当前IDatabaseConfigure把连接元数据应用到 EF Core Provider。- 如果启用了动态模型,模型缓存键会切换到动态缓存实现。