Dapper映射嵌套复杂类型依赖MultiMapping和自定义TypeHandler:MultiMapping处理1对1/1对多及最多7层泛型组合,TypeHandler支持JSON字段自动序列化,CustomTypeMap应对继承场景,需手动处理列名冲突、NULL关联与N+1问题。
Dapper 映射嵌套复杂类型,核心靠 MultiMapping(多对象映射)和 自定义 TypeHandler 两类机制。它不自动递归解析三层以上对象,也不支持原生的“深度导航属性”映射(比如 Post.Owner.Address.City),但通过组合策略完全可以实现清晰、可控的深层结构。
这是最常用也最直接的方式,适用于两层或手动组装三层结构:
Query + splitOn 指定分割列(如 "UserId"),再在委托里赋值:(post, user) => { post.Owner = user; return post; }
Lookup 或 GroupBy 分组组装Query,最多支持 7 个泛型参数,splitOn 需传入逗号分隔字符串,如 "UserId,ProfileId",Dapper 会依序切分字段段当深层结构不适合拆成多表 JOIN(比如用户配置、订单明细项列表),推荐把嵌套部分存为 JSON 字段,再用自定义 TypeHandler 自动转换:
VARCHAR(MAX) 或原生 JSON(SQL Server 2016+ / MySQL 5.7+ / PostgreSQL)JsonTypeHandler 类,重写 Parse 和 SetValue,用 System.Text.Json 处理序列化SqlMapper.AddTypeHandler(new JsonTypeHandler());
public Address ShippingAddress { get; set; },Dapper 读写时自动处理当嵌套对象类型不固定(如基类 Notification 下有 EmailNotif、SmsNotif 子类),需靠 ITypeMap 实现运行时类型选择:
NotifType 值为 "Email")决定实例化哪个子类DefaultTypeMap 或实现 ITypeMap,在 GetMemberMaps 中注入逻辑SqlMapper.SetTypeMap(typeof(Notification), yourCustomMap) 全局生效User.PreferredNotif)就能返回具体子类型,而非空基类Dapper 不会像 EF Core 那样扫描导航属性并自动 JOIN。以下情况必须手动干预:
Id)→ 务必用 SQL 别名:p.Id as PostId, u.Id as UserId,并让 splitOn 对应别名post.Owner = user ?? null;
SELECT * 导致 splitOn 错位基本上就这些。Dapper 的嵌套映射不是“全自动”,但每一步都透明可控,写清楚 splitOn、写好映射委托、配对好 TypeHandler,深层结构也能很稳。
# mysql
# js
# json
# app
# ai
# red
# sql
# NULL
# 子类
# select
# 字符串
# 递归
# 循环
# 继承
# public
# 委托
# 泛型
# 对象
# typeof
# postgresql
# 数据库
# 自定义
# 最多
# 再用
# 这是
# 也不
# 都有
# 序列化
# 切分
相关文章:
C#如何序列化对象为XML XmlSerializer用法
黑客入侵网站服务器的常见手法有哪些?
北京网站制作的公司有哪些,北京白云观官方网站?
如何注册花生壳免费域名并搭建个人网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何自定义建站之星模板颜色并下载新样式?
建站之星在线版空间:自助建站+智能模板一键生成方案
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
建站之星伪静态规则如何设置?
制作农业网站的软件,比较好的农业网站推荐一下?
如何在橙子建站上传落地页?操作指南详解
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何在云主机上快速搭建多站点网站?
如何通过.red域名打造高辨识度品牌网站?
建站与域名管理如何高效结合?
制作网站的基本流程,设计网站的软件是什么?
如何通过西部建站助手安装IIS服务器?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
如何通过NAT技术实现内网高效建站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
测试制作网站有哪些,测试性取向的权威测试或者网站?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何用低价快速搭建高质量网站?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
制作网站的公司有哪些,做一个公司网站要多少钱?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
C++如何编写函数模板?(泛型编程入门)
如何通过智能用户系统一键生成高效建站方案?
如何基于云服务器快速搭建网站及云盘系统?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
网页设计与网站制作内容,怎样注册网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
seo网站制作优化,网站SEO优化步骤有哪些?
移民网站制作流程,怎么看加拿大移民官网?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
家庭服务器如何搭建个人网站?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
微课制作网站有哪些,微课网怎么进?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何快速重置建站主机并恢复默认配置?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
h5在线制作网站电脑版下载,h5网页制作软件?
如何选择PHP开源工具快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。