引言
由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方式
环境准备
dapper环境
nuget中 下载安装 Dapper, DapperExtensions.NetCore
数据驱动准备
orcale: Oracle.ManagedDataAccess.Core
SQLite: System.Data.SQLite.Core
日志组件
log4net
Dapper 实体操作简单使用
var orcalConn = new OracleConnection(strConn); var orcaleconfig = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new OracleDialect()); var orcaleGenerator = new SqlGeneratorImpl(orcaleconfig); connection = new Database(orcalConn, orcaleGenerator);
注:数据库不同时 改变 这段内容即可
插入数据使用方式举例:
Connection.Insert(list, tran, commandTimeout);
针对DapperExtensions简单封装
新建core 类库项目 并引用好所需nuget包
增加以下类


using DapperExtensions.Mapper; using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.Text; using Dapper; using DapperExtensions; using System.Reflection; using DapperExtensions.Sql; using Oracle.ManagedDataAccess.Client; using System.Data.SqlClient; using MySql.Data.MySqlClient; namespace CommonHelper { /// <summary> /// 数据库连接辅助类 /// </summary> public class ConnectionFactory { /// <summary> /// 转换数据库类型 /// </summary> /// <param name="databaseType">数据库类型</param> /// <returns></returns> public static DatabaseType GetDataBaseType(string databaseType) { DatabaseType returnValue = DatabaseType.SqlServer; foreach (DatabaseType dbType in Enum.GetValues(typeof(DatabaseType))) { if (dbType.ToString().Equals(databaseType, StringComparison.OrdinalIgnoreCase)) { returnValue = dbType; break; } } return returnValue; } /// <summary> /// 获取数据库连接 /// </summary> /// <returns></returns> public static Database CreateConnection(string strConn, DatabaseType databaseType = DatabaseType.Oracle) { Database connection = null; //获取配置进行转换 switch (databaseType) { case DatabaseType.SqlServer: var sqlConn = new SqlConnection(strConn); var sqlconfig = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new SqlServerDialect()); var sqlGenerator = new SqlGeneratorImpl(sqlconfig); connection = new Database(sqlConn, sqlGenerator); break; case DatabaseType.MySql: var mysqlConn = new MySqlConnection(strConn); var mysqlconfig = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new MySqlDialect()); var mysqlGenerator = new SqlGeneratorImpl(mysqlconfig); connection = new Database(mysqlConn, mysqlGenerator); break; case DatabaseType.Sqlite: var sqlliteConn = new SQLiteConnection(strConn); var sqlliteconfig = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new SqliteDialect()); var sqlliteGenerator = new SqlGeneratorImpl(sqlliteconfig); connection = new Database(sqlliteConn, sqlliteGenerator); break; case DatabaseType.Oracle: var orcalConn = new OracleConnection(strConn); var orcaleconfig = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new OracleDialect()); var orcaleGenerator = new SqlGeneratorImpl(orcaleconfig); connection = new Database(orcalConn, orcaleGenerator); break; } return connection; } } }


using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Text; using System.Threading.Tasks; using Dapper; using DapperExtensions; using Microsoft.Extensions.Configuration; namespace CommonHelper { /// <summary> /// dapper 帮助类 /// </summary> public class DapperHelper : IDapperHelper, IDisposable { private string ConnectionString = string.Empty; private Database Connection = null; /// <summary> /// 初始化 若不传则默认从appsettings.json读取Connections:DefaultConnect节点 /// 传入setting:xxx:xxx形式 则会从指定的配置文件中读取内容 /// 直接传入连接串则 /// </summary> /// <param name="conn"></param> /// <param name="jsonConfigFileName"> 配置文件名称</param> public DapperHelper(string conn = "", string jsonConfigFileName = "appsettings.json", DatabaseType databaseType = DatabaseType.Oracle) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(jsonConfigFileName, optional: true) .Build(); if (string.IsNullOrEmpty(conn)) { conn = config.GetSection(