全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Dapper怎么处理只写属性 Dapper Write-Only Property映射

Dapper 默认不支持只写属性映射,因其在反序列化前通过 PropertyInfo.CanRead 过滤属性,跳过无 get 的属性;虽 SetValue 支持赋值,但前期元数据筛选已排除。

Dapper 默认不支持只写属性(即只有 set、没有 get 的属性)的映射,因为它在反序列化时需要通过属性的 set 方法赋值,但同时也依赖反射获取属性元数据——而标准 .NET 反射对纯只写属性的支持有限,尤其在旧版 Dapper(如 2.0 之前)中会直接跳过这类属性,导致映射失败或静默忽略。

只写属性为什么通常映射不了

Dapper 在执行查询后,使用 PropertyInfo.SetValue() 给目标对象赋值,这一步本身能接受只写属性。但问题出在前期:它会先调用 PropertyInfo.CanRead 判断是否为可读属性,默认过滤掉 CanRead == false 的属性。所以即使你写了 set,只要没 get,Dapper 就不会把它纳入映射字段列表。

绕过限制的实用方法

  • 改用带 get 的属性:最简单可靠的方式。哪怕 get 返回默认值或 throw,只要存在且可访问,Dapper 就能识别。例如:public string Name { get => throw new NotSupportedException(); set { _name = value; } }
  • 用 SQL 别名 + 匿名对象中转:先查到匿名类型或 Dictionary,再手动给只写属性赋值。适合少量字段或初始化场景。
  • 自定义 ITypeMap 实现:重写 GetMember(string columnName),主动返回只写属性的 PropertyInfo,并确保 CanRead 不作为硬性过滤条件。需继承 SqlMapper.ITypeMap 并注册:SqlMapper.SetTypeMap(typeof(MyDto), new MyCustomTypeMap());
  • 避免只写属性用于查询映射:设计上建议 DTO 或实体只暴露需要读取的属性;只写逻辑(如密码哈希、审计时间戳)更适合放在插入/更新时由业务层控制,而非依赖查询结果自动填充。

插入/更新时的只写属性处理

对于 InsertUpdate 操作,Dapper 仅用 PropertyInfo.GetValue() 提取参数值,这时只写属性因无法 GetValue 会报错或传 null。所以只写属性不应出现在 Insert/Update 的参数对象中。正确做法是:

  • 用专门的 InputModel(全读写)接收前端或业务输入
  • 在服务层转换时,把只写逻辑(如生成创建时间、加密字段)显式赋值
  • 保持数据库操作对象干净、可映射

基本上就这些。Dapper 的设计哲学偏向“约定优于配置”,对非常规结构支持有限,只写属性属于边缘场景,优先调整模型设计比硬扛映射更可持续。


# 前端  # app  # .net  # 为什么  # sql  # String  # Object  # NULL  # throw  # 继承  # public  # Property  # 对象  # typeof  # 数据库  # 只写  # 不支持  # 跳过  # 序列化  # 放在  # 就能  # 就不  # 出现在  # 这类  # 写了 


相关文章: 北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在服务器上三步完成建站并提升流量?  建站之星Pro快速搭建教程:模板选择与功能配置指南  学校免费自助建站系统:智能生成+拖拽设计+多端适配  导航网站建站方案与优化指南:一站式高效搭建技巧解析  建站之星安装路径如何正确选择及配置?  如何用花生壳三步快速搭建专属网站?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  定制建站流程解析:需求评估与SEO优化功能开发指南  网站制作服务平台,有什么网站可以发布本地服务信息?  学校为何禁止电信移动建设网站?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何用美橙互联一键搭建多站合一网站?  建站之星如何助力网站排名飙升?揭秘高效技巧  代购小票制作网站有哪些,购物小票的简要说明?  如何快速完成中国万网建站详细流程?  ,购物网站怎么盈利呢?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站之星如何保障用户数据免受黑客入侵?  如何选择服务器才能高效搭建专属网站?  IOS倒计时设置UIButton标题title的抖动问题  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  再谈Python中的字符串与字符编码(推荐)  如何通过虚拟主机快速搭建个人网站?  制作企业网站建设方案,怎样建设一个公司网站?  如何通过智能用户系统一键生成高效建站方案?  制作网页的网站有哪些,电脑上怎么做网页?  如何彻底卸载建站之星软件?  网站制作价目表怎么做,珍爱网婚介费用多少?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  html制作网站的步骤有哪些,iapp如何添加网页?  高端建站如何打造兼具美学与转化的品牌官网?  如何快速搭建高效简练网站?  建站之星收费标准详解:套餐费用及年费价格表一览  javascript基本数据类型及类型检测常用方法小结  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何选择适配移动端的WAP自助建站平台?  如何确保西部建站助手FTP传输的安全性?  海南网站制作公司有哪些,海口网是哪家的?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站之星如何通过成品分离优化网站效率?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  建站之星如何修改网站生成路径?  如何快速选择适合个人网站的云服务器配置?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何快速重置建站主机并恢复默认配置?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何打造高效商业网站?建站目的决定转化率 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。