新闻中心
Dapper.FluentMap是什么 Dapper.FluentMap流畅映射配置教程
Dapper.FluentMap 是一个为 Dapper 设计的轻量级编译期映射配置库,通过 Fluent API 在启动时注册列名映射规则,解决数据库下划线命名、字段前缀/后缀、审计字段忽略及统一约定等场景,需在首次查询前完成 Initialize 初始化。

Dapper.FluentMap 是什么
Dapper.FluentMap 是一个为 Dapper 设计的轻量级映射配置扩展库,用于解决“数据库列名与 C# 属性名不一致”时的手动映射问题。它不改变 Dapper 的核心行为,也不引入运行时反射开销,而是通过编译期友好的 Fluent API,在应用启动时一次性注册映射规则,让 Dapper 知道“哪个属性对应哪一列”或“哪些属性该忽略”。
它特别适合这些场景:
- 数据库用下划线命名(user_name)而实体用 PascalCase(UserName)
- 表字段含前缀(如 tbl_user_id)或后缀(如 created_dt)
- 某些字段纯属审计列(updated_by, is_deleted),不想映射进实体
- 需要统一
约定(比如所有 Id 属性都映射到 autID)而不逐个写 SQL 别名
基础映射配置步骤
以 User 实体为例,假设数据库表字段是 usr_id、usr_name、usr_email,而 C# 类是:
public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } }
你需要:
- 创建映射类,继承
EntityMap<user></user> - 在构造函数中用
Map()显式指定列名,或用Ignore()跳过字段 - 在程序启动时(如
Program.cs或Startup.ConfigureServices)调用FluentMapper.Initialize()注册
示例代码:
public class UserMap : EntityMap
{
public UserMap()
{
Map(x => x.Id).ToColumn("usr_id");
Map(x => x.Name).ToColumn("usr_name");
Map(x => x.Email).ToColumn("usr_email");
}
}
FluentMapper.Initialize(config =>
{
config.AddMap(new UserMap());
});
忽略字段和约定式映射
如果实体里有不对应数据库列的属性(比如 FullName 计算属性),必须显式忽略,否则 Dapper 可能报错或静默跳过:
Map(x => x.FullName).Ignore();
若多个实体都有类似规则(例如所有 Id 属性都映射到带前缀的列),可用 约定(Convention) 统一处理:
- 新建类继承
Convention - 用
Properties<t>().Where(...)</t>定位目标属性 - 调用
Configure(c => c.HasColumnName(...))设置列名 - 在
Initialize中用AddConvention<yourconvention>()</yourconvention>加载
这样比每个实体写一遍 Map 更干净,也更易维护。
注意事项和常见坑
配置生效的前提是:必须在任何 Dapper 查询执行前完成初始化。常见错误包括:
- 映射类没在
Initialize中注册——查询时仍按默认规则(属性名=列名)匹配 - 忽略语句写错位置(比如放在
Map外部)——Ignore()必须链在Map(x => ...)后面 - 使用了
Dapper.Contrib的 CRUD 方法(如GetAsync)但没配Key或Table特性——FluentMap 不影响 Contrib 的特性解析,二者需配合使用 - 多线程环境下提前触发了 Dapper 查询——确保
FluentMapper.Initialize在主线程或 DI 容器构建完成后再执行
基本上就这些。不复杂但容易忽略初始化时机和链式调用结构。
以上就是Dapper.FluentMap是什么 Dapper.FluentMap流畅映射配置教程的详细内容,更多请关注其它相关文章!
# 跳过
# 外国语网站建设需要
# 怎么推广游戏网站的
# 个人网站哪个好做推广呢
# 看书小说网站建设工作
# 厦门抖音seo教程
# 珠海市企业网站推广平台
# 百度营销推广网站报告
# 宜兴网站建设报价公司
# 新塘百度SEO
# 吴中区网站建设论坛
# 游戏开发
# app
# 发展趋势
# 链式
# 下划线
# 你在
# 有哪些
# 启动时
# 多线程
# 是一个
# c#
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
J*a里如何使用forEach遍历Map_Map遍历方法说明
J*aScript对象创建方式_J*aScript设计模式应用
J*aScript中安全有效地处理localStorage字符串数据
Go语言中的*string:深入理解字符串指针
yy漫画网页版官方入口_yy漫画官网登录页面链接
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
黑猫投诉统一入口官网 消费者权益保护投诉平台
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
word中如何让数字纵向排列_Word数字纵向排列方法
解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南
Win11怎么开启高性能模式_Windows 11电源计划优化设置
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法
顺丰国际快递查询 国际件官方查询入口
CSS Grid如何控制元素对齐_align-items与justify-items组合使用
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
J*aScript类型检查_j*ascript代码规范
AO3官方可用镜像 Archive of Our Own网页版最新入口
铃兰之剑为这和平的世界希里技能组及加点推荐
wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法
如何提高微信支付的安全性_微信支付安全防护与设置建议
单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
千牛数据看板网页版_千牛数据看板网页版访问方法
从OpenAI API响应中高效提取生成文本
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
Django表单提交验证失败后保持字段值不刷新
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
红果短剧网页版官网入口 官方最新网址发布
AO3网页版最新入口合集 Archive of Our Own在线访问指南
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
J*aScript map 迭代中检测空数组元素的有效方法
LINUX怎么设置定时任务_LINUX crontab配置教程
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
如何在 Windows 11 中启动游戏手柄设置
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
知音漫客官网漫画下载_知音漫客网页版阅读记录
4399免费游戏网址入口 4399小游戏免费入口点开即玩
痛风发作了怎么办? 快速止痛和后期饮食调理
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程


2025-12-14
浏览次数:次
返回列表