假设你的pg数据库有这样一个table结构

test{

integer[] arr

}

如果用dapper查询ids,那么会返回一个int[]类型

如果你同时用protobuf生成了消息文件,

{

repeated int32 arr

}

他在程序中实际为一个集合类型(IList类型)

我阅读了Protobuf相关的代码和Dapper相关代码,

尝试重载操作符转换[] 为list

但是发现reapted 字段属性只有get没有set.

曾经一度想改protobuf或者dapper的源代码进行适应,但是权衡后发现并不合适,

突然想起来protobuf生成的文件为partial类.(部分类)
顿时醍醐灌顶,思如泉涌.

由于proto文件生成的类会自动首字母大写.

而postgresql对列名和表名区分大小写,所以

proto文件生成的列名为Arr

而我们数据库里的列名为arr

写一个扩展类

public sealed partial class test
{public RepeatedField<int> arr {get { return arr_; }set { arr_.AddRange(value); }}
}

再写一个Dapper的自定义列处理函数,如果要处理多种数组类型,那么把int改为T即可.

public class myCustomTypeCast : SqlMapper.TypeHandler<RepeatedField<int>>
{public new void SetValue(IDbDataParameter parameter, int[] value){parameter.Value = value;}public override void SetValue(IDbDataParameter parameter, RepeatedField<int> value){parameter.Value = value;}public override RepeatedField<int> Parse(object value){var tmp = value as IEnumerable<int>;var result = new RepeatedField<int>();result.AddRange(tmp);Console.WriteLine("###1");return result;}
}

//只需要设置一次该类型处理函数即可
SqlMapper.AddTypeHandler(typeof(RepeatedField<int>), new myCustomTypeCast());

以上属于一种解决思路,

缺陷是如果你原来有一个Arr变量,现在会多一个arr变量.但好消息是,Arr和arr都是指向的一个对象,

他们的内容是一模一样的,因为他们只是作为一个属性访问器存在,Arr没有set方法,arr的set方法也并不实例化任何对象,他做的就是在目标对象上调用添加函数,将数据存放到数据应该去的地方!

enjoy it...

postgresql用dapper操作并且联合protobuf的array数组问题相关推荐

  1. .NET Core 使用Dapper 操作MySQL

    MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...

  2. netcore dapper mysql_.NET Core Dapper操作mysql数据库

    前言 现在ORM盛行,市面上已经出现了N款不同的ORM套餐了.今天,我们不谈EF,也不聊神马黑马,就说说 Dapper.如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头 ...

  3. .NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  4. dapper mysql_.NET Core Dapper操作mysql数据库

    .NET Core Dapper操作mysql数据库 发布时间:2019-04-25 19:48, 浏览次数:744 , 标签: NET Core Dapper mysql 前言 现在ORM盛行,市面 ...

  5. dapper mysql_.NET Core Dapper操作mysql数据库的实现方法

    前言 现在ORM盛行,市面上已经出现了N款不同的ORM套餐了.今天,我们不谈EF,也不聊神马黑马,就说说 Dapper.如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头 ...

  6. PostgreSQL的基础操作

    PostgreSQL的基础操作 参考资料:postgresql常用操作 postgre系统字段 侵删 本人正在学习使用postgreSQL和PL/pgSQL的基本操作和语言环境等,本文会根据我的学习计 ...

  7. dapper调用oracle存储过程,.NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  8. javascript数组降维_js Array数组实用操作大全(≈28条)不定期更新

    来源:(更新:2019-12-26)https://github.com/renzhezhilu/Blog/blob/master/javaScript/jsAdvanced/Array%E6%93% ...

  9. Java中Arrays.toString ()打印二维数组及Array数组的常用操作

    1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...

最新文章

  1. java url路径包含中文_谈谈 Java 类加载机制
  2. 我把SpringBoot的banner换成了美女,老板:工作不饱和,建议加班
  3. myclipse 项目struts 2 版本升级过程
  4. 万变不离其中----SQL必记语法
  5. 小白都能看懂的目前主流加密MD5验签
  6. Java 单例模式探讨
  7. C++的error C2668: 'pow' : ambiguous call to overloaded function错误原因及解决方法
  8. 【git】【eclipse】 误操作“忽略(ignore)文件”,取消忽略文件操作
  9. es常用curl命令
  10. 第一章:系统困境之 再努力也不能直接打开的死结
  11. 使用Java和JCEKS进行AES-256加密
  12. 设计模式-模板方法模式(15)
  13. 农村70后、80后、90后的儿时玩具有哪些?
  14. 【Django 2021年最新版教程3】新建一个WebApp项目并运行
  15. Spring知识点总结
  16. VC 界面库 皮肤库
  17. 【转载】VC项目配置基础
  18. 优化mac触摸板(Trackpad)使用体验的推荐设置
  19. Linux系统网络服务——安全与防火墙笔记
  20. 深扒中国最神秘的百亿快时尚巨头SheIn

热门文章

  1. CNTK-106 Part A:ValueError
  2. html刷新页面信息消失,存储在localstorage中的变量在页面刷新时消失
  3. 京豆—青龙面板相关设置+XDD的环境安装与使用
  4. 百度地图个性化编辑以及使用
  5. Windows10设置开发者模式并安装WSL
  6. bios设置计算机用户密码,怎样为电脑设置开机密码,设置BIOS密码步骤
  7. WPS表格 JSA 学习笔记 - 实现【设置编号】并添加到自定义选项卡
  8. SVN服务器安装与常用操作(超详细)
  9. 2021年中国短视频用户规模及头部企业分析:快手电商交易总额达6800.36亿元,同比增长78.41%[图]
  10. 这位新世界首富,到底有多强...