用途
该技能面向 .NET 项目,用于生成 Entity Framework Core 的配置代码。其核心目标是通过 Fluent API 将领域实体映射到数据库表,并保持领域模型本身不被持久化细节污染。配置以 IEntityTypeConfiguration 的形式按实体拆分,每个实体对应一个独立的配置类。
主要能力
技能提供的配置模板覆盖以下方面:
- 表映射:使用 ToTable() 指定表名,采用 snake_case 命名约定(面向 PostgreSQL)。
- 主键:使用 HasKey() 定义主键,并通过 ValueGeneratedNever() 表示由应用生成 GUID。
- 属性配置:使用 Property() 设置最大长度、是否必填、列类型、默认值以及默认 SQL 值(如 CURRENT_TIMESTAMP AT TIME ZONE 'UTC')。
- 索引与约束:使用 HasIndex() 创建索引,支持唯一索引与复合唯一约束。
- 关系映射:支持一对多、多对一、自引用以及多对多关系,可指定外键与删除行为(Cascade、Restrict)。
- 值对象:通过 OwnsOne() 将值对象映射为 Owned Type,可映射到同一表的多个列,也可映射为 JSON。
- 枚举映射:支持将枚举存储为字符串、整数或自定义转换。
- 影子属性:可为不在领域实体上的审计字段(CreatedAt、UpdatedAt、CreatedBy、UpdatedBy、Version)配置影子属性,其中 Version 可作为并发令牌。
- 软删除:配置 IsDeleted、DeletedAt 字段,并使用 HasQueryFilter() 添加全局查询过滤器以排除已删除记录。
- JSON 列:面向 PostgreSQL 的 jsonb 列配置,支持字典序列化以及 EF Core 7+ 的 ToJson() 映射。
- Outbox 消息:提供 OutboxMessage 表的配置模板,包含 jsonb 内容列与针对未处理消息的过滤索引。
使用方式
技能以代码模板形式给出配置结构。配置类通常放置在 /Infrastructure/Configurations/ 目录下,命名形如 {Entity}Configuration.cs、{ChildEntity}Configuration.cs、{ValueObject}Configuration.cs 以及 OutboxMessageConfiguration.cs。模板中包含命名空间、using 引用与类定义,用户可据此替换实体名与属性名。资料中未提供安装命令或调用命令。
适用场景
适用于采用 Clean Architecture 的 .NET 项目,尤其是使用 PostgreSQL 并希望以 Fluent API 集中管理 EF Core 映射、保持领域层无持久化特性的场景。也适用于需要处理复杂关系、值对象、软删除、审计字段或 Outbox 模式的持久化层设计。
限制
资料中未说明该技能支持的 .NET 或 EF Core 具体版本范围(除 ToJson() 标注为 EF Core 7+ 外),未提供安装方式、依赖要求、收费信息或实际运行效果。部分模板中的占位符(如 {name}、{Entity}、{aggregate})需要使用者自行替换。