本篇我将带着大家一起来对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 name="dbtype">数据库类型</param>
/// <param name="conStr">数据库连接字符串</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 name="dbType">数据库类型</param>
/// <param name="conStr">数据库连接字符串</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 name="dbtype">数据库类型字符串</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;
}
}
那么,我们怎么来使用这个工厂类呢?如下给出调用的实例。
是不是很简单,感觉瞬间少了很多代码,这段代码摘