关于Dapper的介绍,我想很多人都对它有一定的了解,这个类似一个轻型的ORM框架是目前应用非常火的一个东西,据说各方面的性能都不错,而且可以支持多种数据库,在开始介绍这个文章之前,我花了不少功夫来学习了Dapper 的相关使用。Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化,我做了一个案例使用Dapper.Contrib 开发.net core程序,测试它对多种数据库的处理。
1、Dapper.Contrib的使用
前面介绍过,Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化。
它主要是通过特性映射的方式实现自定义类和数据库之间的关系处理,如下是实体类的定义信息。
[Table("T_Customer")] public class CustomerInfo { [ExplicitKey]//非自增长的用此标识 public virtual string ID { get; set; } public virtual string Name { get; set; } public virtual int Age { get; set; } public virtual string Creator { get; set; } public virtual DateTime CreateTime { get; set; } }
Dapper.Contrib的所有实体配置选项
- Table:指定实体对应地数据库表名,如果类名和数据库表名不同,需要设置(如案例所示)
- Key:指定此列为自动增长主键
- ExplicitKey:指定此列为非自动增长主键(例如guid,字符串列)
 
- Computed:计算属性,此列不作为更新
- Write:指定列是否可写
通过定义好实体类和数据库表的映射关系,就可以通过强类型处理相关的接口了,如下所示。
T Get<T>(id); IEnumerable<T> GetAll<T>(); int Insert<T>(T obj); int Insert<T>(Enumerable<T> list); bool Update<T>(T obj); bool Update<T>(Enumerable<T> list); bool Delete<T>(T obj); bool Delete<T>(Enumerable<T> list); bool DeleteAll<T>();
这样通过映射指定表名或者字段信息后,就可以知道类和表之间的关系,可以封装对应的强类型处理接口了。
2、Dapper.Contrib 开发.net core程序
我们创建一个空白的.net core程序框架后,就在它的基础上做一些Dapper的数据库测试。
首先为了考虑多数据库的处理,我们需要创建一个配置文件,并可以动态配置不同的数据库,配置文件appSettings.json如下所示。

上面我配置了多种数据库的连接字符串,并且通过动态指定节点名称和数据库类型,来实现对项目指向不同数据库的访问。
例如我们准备需要让Dapper支持我们常见的数据库类型,如下定义数据库类型。
/// <summary> /// 数据库类型定义 /// </summary> public enum DatabaseType { SqlServer, //SQLServer数据库 MySql, //Mysql数据库 Npgsql, //PostgreSQL数据库 Oracle, //Oracle数据库 Sqlite, //SQLite数据库 DB2 //IBM DB2数据库 }
对于不同的数据库信息,我们需要根据不同的配置连接字符串,并创建对应的数据库连接对象供Dapper使用,如对于SQLServer的数据库,那么创建的是SqlConnection对象,对于Mysql,创建的是MySqlConnection连接对象,对

