FreeSql 使用 Fluent API 配置实体映射详解
2025-06-15 14:44:23作者:柏廷章Berta
什么是 Fluent API
Fluent API 是一种通过代码方式配置实体与数据库表映射关系的方法。相比特性注解方式,Fluent API 提供了更灵活、更强大的配置能力,可以在不修改实体类的情况下完成复杂的映射配置。
基本配置方法
在 FreeSql 中,我们可以通过实现 IEntityTypeConfiguration<T> 接口来为实体类配置映射关系。下面是一个完整的配置示例:
public class SongConfiguration : IEntityTypeConfiguration<Song>
{
public void Configure(EfCoreTableFluent<Song> eb)
{
// 配置表名
eb.ToTable("tb_song");
// 配置主键
eb.HasKey(e => e.Id);
// 配置字段
eb.Property(e => e.Title)
.HasColumnName("title") // 自定义列名
.HasComment("歌曲标题") // 添加注释
.IsRequired(); // 设置为必填
eb.Property(e => e.Url)
.HasMaxLength(500) // 设置最大长度
.IsRequired();
eb.Property(e => e.CreateTime)
.HasDefaultValueSql("CURRENT_TIMESTAMP"); // 设置默认值
eb.Property(e => e.RowVersion)
.IsRowVersion(); // 设置为行版本
}
}
常用配置项详解
1. 表名配置
eb.ToTable("tb_song"); // 指定表名
2. 主键配置
eb.HasKey(e => e.Id); // 指定主键
3. 字段配置
字段配置是最常用的部分,可以配置以下内容:
- 列名:
HasColumnName("column_name") - 注释:
HasComment("字段说明") - 是否必填:
IsRequired()或IsRequired(false) - 最大长度:
HasMaxLength(100) - 默认值:
HasDefaultValue("默认值")或HasDefaultValueSql("SQL表达式") - 忽略字段:
Ignore()不映射到数据库
4. 索引配置
eb.HasIndex(e => e.Title); // 单字段索引
eb.HasIndex("idx_title_url", e => new { e.Title, e.Url }); // 复合索引
5. 导航属性配置
eb.HasOne(e => e.Album) // 一对一关系
.WithMany() // 对应多端
.HasForeignKey(e => e.AlbumId); // 外键
命名转换策略
FreeSql 支持全局的命名转换策略,可以在构建 FreeSql 对象时指定:
var fsql = new FreeSqlBuilder()
.UseConnectionString(DataType.MySql, connectionString)
.UseNameConvert(NameConvertType.PascalCaseToUnderscoreWithLower) // 驼峰转下划线
.Build();
这样配置后,类似 RowVersion 的属性会自动映射为 row_version 列名,无需单独配置。
应用配置
配置完成后,需要在 CodeFirst 迁移时应用配置:
fsql.CodeFirst.ApplyConfiguration(new SongConfiguration());
最佳实践
- 集中管理配置:为每个实体创建单独的配置类,便于维护
- 合理使用注释:通过
///<summary>和HasComment()双重注释,既方便代码阅读又能在数据库中看到字段说明 - 保持一致性:团队内统一命名风格和配置方式
- 优先使用 Fluent API:相比特性注解,Fluent API 更灵活且不污染实体类
通过以上方式,可以充分利用 FreeSql 的 Fluent API 功能,实现灵活、可维护的实体-数据库映射配置。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112
项目优选
收起
暂无描述
Dockerfile
733
4.75 K
Ascend Extension for PyTorch
Python
621
795
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
395
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.01 K
1.01 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.18 K
152
deepin linux kernel
C
29
16
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
146
237
暂无简介
Dart
983
252
昇腾LLM分布式训练框架
Python
166
198
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.68 K
989