本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查、分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL)。同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要结合业务来实现具体的业务部分的代码就可以了,可以大大减少我们重复而又繁琐的增删改查操作,多留点时间给生活充充电(不会偷懒的程序员不是一位好爸爸/好老公/好男朋友)。如果您觉得我的实现过程有所不妥的话,您可以在评论区留言,或者加入我们的千人.Net Core实战项目交流群637326624交流。另外如果您觉得我的文章对您有所帮助的话希望给个推荐以示支持。项目的源代码我会托管在GayHub上,地址在文章末尾会给出,自认为代码写的很工整,注释也很全,你应该能看懂!
本文已收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划》
作者:依乐祝
原文地址:
写在前面将近一周没有更新,鬼知道我这么长时间在干什么,你可以认为我在憋大招,在想着怎么给大家分享更多更实用的东西。其实这只是我偷懒的借口罢了!下面我们一起来对Dapper进行下封装吧,然后结合Dapper.SimpleCRUD 来实现基本的增删改查、分页操作。这部分功能实现完成后,往下我们也就是基于这些基本操作来实现我们的CMS的业务了,如:权限部分,菜单部分,文章部分的功能。接下来我会对这部分快速的实现,可能会很少更新了,因为这些都是基本的CMS的业务操作,没多少要分享的内容,毕竟每个人的系统业务都不一样,这部分的业务实现也是千差万别的。我后期会把成品直接分享给大家!敬请关注吧!
Dapper的封装 IDbConnection工厂类的封装这部分我实现了一个IDbConnection的工厂类,以便你可以很方便的根据数据库的类型来创建不同的IDbConnection对象,目前已实现对SqlServer,MySQL,PostgreSQL的实现,具体代码如下,根据传入的参数来进行相关的实现。
/// <summary> /// yilezhu /// 2018.12.13 /// 数据库连接工厂类 /// </summary> public class ConnectionFactory { /// <summary> /// 获取数据库连接 /// </summary> /// <param>数据库类型</param> /// <param>数据库连接字符串</param> /// <returns>数据库连接</returns> public static IDbConnection CreateConnection(string dbtype, string strConn) { if (dbtype.IsNullOrWhiteSpace()) throw new ArgumentNullException("获取数据库连接居然不传数据库类型,你想上天吗?"); if (strConn.IsNullOrWhiteSpace()) throw new ArgumentNullException("获取数据库连接居然不传数据库类型,你想上天吗?"); var dbType = GetDataBaseType(dbtype); return CreateConnection(dbType,strConn); } /// <summary> /// 获取数据库连接 /// </summary> /// <param>数据库类型</param> /// <param>数据库连接字符串</param> /// <returns>数据库连接</returns> public static IDbConnection CreateConnection(DatabaseType dbType, string strConn) { IDbConnection connection = null; if (strConn.IsNullOrWhiteSpace()) throw new ArgumentNullException("获取数据库连接居然不传数据库类型,你想上天吗?"); switch (dbType) { case DatabaseType.SqlServer: connection = new SqlConnection(strConn); break; case DatabaseType.MySQL: connection = new MySqlConnection(strConn); break; case DatabaseType.PostgreSQL: connection = new NpgsqlConnection(strConn); break; default: throw new ArgumentNullException($"这是我的错,还不支持的{dbType.ToString()}数据库类型"); } if (connection.State == ConnectionState.Closed) { connection.Open(); } return connection; } /// <summary> /// 转换数据库类型 /// </summary> /// <param>数据库类型字符串</param> /// <returns>数据库类型</returns> public static DatabaseType GetDataBaseType(string dbtype) { if (dbtype.IsNullOrWhiteSpace()) throw new ArgumentNullException("获取数据库连接居然不传数据库类型,你想上天吗?"); DatabaseType returnValue = DatabaseType.SqlServer; foreach (DatabaseType dbType in Enum.GetValues(typeof(DatabaseType))) { if (dbType.ToString().Equals(dbtype, StringComparison.OrdinalIgnoreCase)) { returnValue = dbType; break; } } return returnValue; } }那么,我们怎么来使用这个工厂类呢?如下给出调用的实例。
是不是很简单,感觉瞬间少了很多代码,这段代码摘录自代码生成器里面。有兴趣的自己去查看源码吧!
CRUD及分页泛型方法的实现
nuget安装Dapper.SimpleCRUD ,什么你要问我怎么安装?乖乖的回去看第二篇文章吧!那里会教你如何安装Nuget包?如果那篇文章里面没有,那你就好好想想为啥没有呢?