NetCore+Dapper WebApi架构搭建(二):底层封装
看下我们上一节搭建的架构,现在开始从事底层的封装
1、首先需要一个实体的接口IEntity
namespace Dinner.Dapper
{
public interface IEntity<TPrimaryKey>
{
TPrimaryKey Id { get; set; }
}
}
2、由于所有的数据库实体都是有主键的,所以这里定义一个BaseModel,这里我用的主键是Guid,你们可以换成int
using System; namespace Dinner.Dapper
{
public class BaseModel : IEntity<Guid>
{
public Guid Id { get; set; }
}
}
3、接下来是封装Dapper的SqlServer配置DataBaseConfig(Redis的配置你们可以忽略),不要忘记添加Dapper的Nuget包
using StackExchange.Redis;
using System.Data;
using System.Data.SqlClient; namespace Dinner.Dapper
{
public class DataBaseConfig
{
#region SqlServer链接配置 private static string DefaultSqlConnectionString = @"Data Source=localhost;Initial Catalog=Dinner;User ID=sa;Password=123456;";
private static string DefaultRedisString = "localhost, abortConnect=false";
private static ConnectionMultiplexer redis; public static IDbConnection GetSqlConnection(string sqlConnectionString = null)
{
if (string.IsNullOrWhiteSpace(sqlConnectionString))
{
sqlConnectionString = DefaultSqlConnectionString;
}
IDbConnection conn = new SqlConnection(sqlConnectionString);
conn.Open();
return conn;
} #endregion #region Redis链接配置 private static ConnectionMultiplexer GetRedis(string redisString = null)
{
if (string.IsNullOrWhiteSpace(redisString))
{
redisString = DefaultRedisString;
}
if (redis == null || redis.IsConnected)
{
redis = ConnectionMultiplexer.Connect(redisString);
}
return redis;
} #endregion
}
}
4、然后是仓储基接口IRepositoryBase,添加了基本的增删改查和一个无参的存储过程
using System;
using System.Collections.Generic;
using System.Threading.Tasks; namespace Dinner.Dapper
{
public interface IRepositoryBase<T>
{
Task Insert(T entity, string insertSql); Task Update(T entity, string updateSql); Task Delete(Guid Id, string deleteSql); Task<List<T>> Select(string selectSql); Task<T> Detail(Guid Id, string detailSql); /// <summary>
/// 无参存储过程
/// </summary>
/// <param name="SPName"></param>
/// <param name="args"></param>
/// <returns></returns>
Task<List<T>> ExecQuerySP(string SPName);
}
}
5、仓储基实现类RepositoryBase继承仓储基接口,简单实现增删改查和无参的存储过程
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks; namespace Dinner.Dapper
{
public class RepositoryBase<T> : IRepositoryBase<T>
{
public async Task Delete(Guid Id, string deleteSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(deleteSql, new { Id = Id });
}
} public async Task<T> Detail(Guid Id, string detailSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
//string querySql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users WHERE Id=@Id";
return await conn.QueryFirstOrDefaultAsync<T>(detailSql, new { Id = Id });
}
} /// <summary>
/// 无参存储过程
/// </summary>
/// <param name="SPName"></param>
/// <returns></returns>
public async Task<List<T>> ExecQuerySP(string SPName)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
return await Task.Run(() => conn.Query<T>(SPName, null, null, true, null, CommandType.StoredProcedure).ToList());
}
} public async Task Insert(T entity, string insertSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(insertSql, entity);
}
} public async Task<List<T>> Select(string selectSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
//string selectSql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users";
return await Task.Run(()=>conn.Query<T>(selectSql).ToList());
}
} public async Task Update(T entity, string updateSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(updateSql, entity);
}
}
}
}
上面这些就是底层基本的封装,下一节我们来添加实体和仓储
源码地址: https://github.com/wangyulong0505/Dinner
NetCore+Dapper WebApi架构搭建(二):底层封装的更多相关文章
- NetCore+Dapper WebApi架构搭建(一):基本框架
初衷是想用dapper搭建一个高性能的架构,因为dapper操作数据库的效率很高 1.VS创建一个NetCore WebApi的框架,然后解决方案添加一个NetStandard的类库 整个解决方案如图 ...
- NetCore+Dapper WebApi架构搭建(四):仓储的依赖注入
上一节我们讲到实体,仓储接口和仓储接口的实现需要遵循约定的命名规范,不仅是规范,而且为了依赖注入,现在我们实现仓储的依赖注入 在NetCore WebApi项目中新添加一个文件夹(Unit),当然你也 ...
- NetCore+Dapper WebApi架构搭建(三):添加实体和仓储
上一节讲了类库添加一些底层的基本封装,下面来添加实体和仓储 1.Entities文件夹添加一个实体类Users,继承BaseModel,即拥有BaseModel的主键 using System; na ...
- NetCore+Dapper WebApi架构搭建(六):添加JWT认证
WebApi必须保证安全,现在来添加JWT认证 1.打开appsettings.json添加JWT认证的配置信息 2.在项目根目录下新建一个Models文件夹,添加一个JwtSettings.cs的实 ...
- NetCore+Dapper WebApi架构搭建(五):Swagger构建WebApi界面
上一节讲解了仓储的依赖注入,想必现在都可以通过构造函数依赖注入直接调用 但是WebApi只是提供一个接口调用,为了方便我们的操作,我们得给他加上一个图形化界面工具,使用Swagger WebApi项目 ...
- 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步
深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...
- .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- NetCore Dapper封装
一.前期环境准备 1.创建一个core webapi的项目,基于core3.1版本创建一个项目. 2.Dapper安装,使用NuGet来安装Dapper程序包 Install-Package Dapp ...
- Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装. Dapper的用法比较接近ADO.NET所以性能也是比较快.所以我们先来看看使用A ...
随机推荐
- Python文件操作-文件的增删改查
需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...
- jquery对不同id的按钮执行同一类型的操作
不同id执行相同操作: $("#id1,#id2,#id3,#id4") 获取相同class的text值: $(".className").each(funct ...
- Rico Board.1.环境配置
1.搭建开发环境 1.解压文件 sudo tar -jvxf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_liunx.tar.bz2 -C ...
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
http://blog.csdn.net/h7870181/article/details/8653865 以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后 ...
- unity3d 材质概述 ---- shader
学习笔记: 材质概述: 物体呈现在我们前面除了形体外,还包括“固有颜色”和“质地”(质感与光学性质).固有颜色让物体的表面看起来是什么颜色,而质感决定了该物质是使用什么材质的.在三维建模软 ...
- 创建第一个MySQL数据库earth及表area
Windows 10家庭中文版,MySQL 5.7.20 for Win 64,2018-05-08 数据库earth描述: 用于记录地球上的事物,一期包含地理区域信息——表area. 字符集编码:u ...
- 你真的了解js伪数组吗?深入js伪数组
关于js伪数组 具有length属性: 按索引方式存储数据: 不具有数组的push().pop()等方法: 你可能知道怎么把伪数组转换为数组,但是你知道这里边的原理吗? 假如页面有一组li元素 < ...
- 学习shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
- javaweb作业二
作业:1.书写servlet的类架构及重要方法.(ServletConfig,Servlet)<---GenericServlet(getInitParameter(String str);in ...
- LeetCode664. Strange Printer
There is a strange printer with the following two special requirements: The printer can only print a ...