首页 / C#开发 / 正文

[C#/.NET]使用Dapper的扩展组件DapperExtensions自定义映射主键,列/表的别名以及忽略部分列

17006 1 发布于: 2019-07-12 读完约需6分钟

前言

Dapper是.NET平台下的一个轻量的实体对象-数据表关系映射的工具组件,也被称为ORM。但从严格意义上来说,Dapper并没有一个完整ORM的所有功能,所以我将它看作一个关系映射组件。它取代了我们传统的DbHelper,并且面向实体对象与关系数据库实现映射。

用过Dapper的开发者应该知道,单纯的Dapper在便捷性来说还显得不是很给力,对数据库的CRUD(增,删,改,查)操作还需要编写原生的SQL语句,比如插入(INSERT)操作:

DapperExtensions介绍

为了使我们更加面向对象,少写SQL语句,本文为大家介绍一个基于Dapper的开源扩展组件:DapperExtensions。

DapperExtensions的开源地址为:https://github.com/tmsmith/Dapper-Extensions

DapperExtensions是一个轻量型的扩展类库组件,通过为POCO添加基本的CRUD操作(Get、Insert、Update、Delete)来对Dapper进行扩展。对于更高级的查询场景,DapperExtensions提供了一个谓词系统,使用DapperExtensions,你可以不需要任何属性或基类继承来保持POCO的整洁性。

什么是POCO:POCO是指Plain Old Class Object,也就是最基本的CLR Class,在原先的EF中,实体类通常是从一个基类继承下来的,而且带有大量的属性描述。而POCO则是指最原始的Class,换句话说这个实体的 Class仅仅需要从Object继承即可,不需要从某一个特定的基类继承。主要是配合Code First使用。Cost Frist则是指我们先定义POCO这样的实体class,然后生成数据库。实际上现在也可以使用Entity Framework Power tools将已经存在的数据库反向生成POCO的class(不通过edmx文件)。

DapperExtensions具有以下特性

  • 零配置:所有方法均扩展至Dapper
  • 自动映射POCO的CRUD操作(Get、Insert、Update、Delete)
  • GetList(), Count()方法具有更高级的应用场景
  • GetPage()可返回分页的结果集
  • 自动支持Guid和整数主键(同时也支持手动配置其他类型的主键)
  • 可使用ClassMapper配置表别名,主键,列别名(实体属性)等的映射
  • 支持复合主键
  • 支持单数和复数表名(默认为单数表名)
  • 可用于更高级场景的易于使用的谓词系统。
  • 在生成的SQL中正确转义表/列名

DapperExtensions的命名规范

  • 实体类名称应该与数据库中的表名匹配。如果是复数表名,可以通过PlurizedAutoClassMapper配置支持。
  • 实体属性名应该与表中的每个列名匹配。
  • 按照惯例,主键应该命名为Id。当然,也可以通过自定义映射支持使用其他名称的主键。

DapperExtensions使用示例

打开Visual Studio(本文为Visual Studio 2019),创建一个名为DapperExtensionsDemo的控制台应用程序(.NET Framework),使用Nuget包管理工具安装DapperExtensions组件,如图:

Nuget包管理工具安装DapperExtensions组件

或者使用Nuget命令:

再创建一个实体类Customer.cs,如下:

创建一个对应测试用的数据表Customer:

请注意:请保持实体类的属性名称与数据表的字段名称对应匹配。

编写一个测试向数据表Customer写入数据的代码,如下:

运行测试程序,输出结果:

说明我们成功向数据表Customer写入了一条数据。

DapperExtensions自定义映射配置

DapperExtensions支持自定义映射配置,需要借助其中内置的ClassMapper,接下来我们演示如何为Customer添加自定义映射配置。

新建一个名为CustomerMapping.cs的类,续承自ClassMapper<T>泛型基类,代码如下:

然后,在这个类的构造函数中,我们就可以配置自定义映射关系,比如自定义表名,主键类型,列名,忽略部分列等等,如下:

可选的主键类型(KeyType)有如下几种:

完成以上配置后,我们再测试写入数据(重新运行一次控制台应用程序),再打开数据库的Customer表,可以看到Id为2的这一行数据的LastName这一列数据被忽略掉(没被写入数据库),如下:

DapperExtensions查询操作

查询方法:

输出结果:

更多关于DapperExtensions的操作,请查看https://github.com/tmsmith/Dapper-Extensions

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: DncZeus前后端分离项目打包/发布/部署及注意事项

下一篇: C#/.NET应用程序编程开发中如何读取文件的大小(文件内容长度)?

本文永久链接码友网 » [C#/.NET]使用Dapper的扩展组件DapperExtensions自定义映射主键,列/表的别名以及忽略部分列

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册