比较好的Dapper封装的仓储实现类 来源:https://www.cnblogs.com/liuchang/articles/4220671.html
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Cache;
using System.Text;
using Dapper;
using DapperExtensions;
using TestData.Entity;
using TestData.Business; namespace TestData.Business
{
/// <summary>
/// 业务逻辑的基类 包含了一些简单的操作
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseManager<T> where T : class, IDataEntity
{
/// <summary>
/// 查询所有
/// </summary>
/// <returns></returns>
public IEnumerable<T> GetAll()
{
using (var conn = ConnectionFactory.Connection)
{
return conn.GetList<T>();
}
} /// <summary>
/// 根绝sql查询
/// </summary>
/// <param name="sql">sql</param>
/// <param name="parameters">参数列表</param>
/// <returns></returns>
public IEnumerable<T> SelectCommond(string sql, object parameters = null)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<T>(sql, parameters);
}
}
/// <summary>
/// 根据表明查询
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public IEnumerable<T> GetAll(string name)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<T>(string.Format("select * from {0}", name));
}
}
/// <summary>
/// 根据编号查询
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T GetById(int? id)
{
if (id == null)
return default(T);
using (var conn = ConnectionFactory.Connection)
{ return conn.Get<T>(id.Value);
}
}
/// <summary>
/// 修改实体
/// </summary>
/// <param name="t">实体对象</param>
/// <returns></returns>
public bool Update(T t)
{
using (var conn = ConnectionFactory.Connection)
{
t.EditorDate = DateTime.Now;
return conn.Update(t);
}
} /// <summary>
/// 得到数量
/// </summary>
/// <returns></returns>
public int GetCount()
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Count<T>(null);
}
} /// <summary>
/// 分页
/// </summary>
/// <param name="predicate"></param>
/// <param name="pageindex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public Tuple<int, IEnumerable<T>> GetPaged(object predicate, int pageindex, int pageSize)
{
using (var conn = ConnectionFactory.Connection)
{
var sort = new List<ISort>
{
Predicates.Sort<T>(p=>p.EditorDate)
}; var total = conn.Count<T>(predicate);
return new Tuple<int, IEnumerable<T>>(total, conn.GetPage<T>(predicate, sort, pageindex, pageSize).ToList());
}
}
/// <summary>
/// 添加
/// </summary>
/// <param name="t">实体对象</param>
/// <returns></returns>
public bool Insert(T t)
{
t.EditorDate = DateTime.Now;
return this.Add(t, false) == t.Id;
}
/// <summary>
/// 添加实体集合
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public bool Insert(List<T> list)
{
using (var conn = ConnectionFactory.Connection)
{
list.ForEach(p => p.EditorDate = DateTime.Now);
return conn.Insert(list);
}
} /// <summary>
/// 添加实体
/// </summary>
/// <param name="t">实体对象</param>
/// <param name="isAutoGenId"></param>
/// <returns></returns>
public int Add(T t, bool isAutoGenId = true)
{
using (var conn = ConnectionFactory.Connection)
{
//var maxindex = conn.Query<int?>(string.Format("select max(indexs) from {0}", typeof(T).Name)).FirstOrDefault() ?? 0;
//t.Indexs = maxindex + 1;
return conn.Insert(t, isGenId: isAutoGenId);
}
}
/// <summary>
/// 根据编号删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool Delete(int? id)
{
var obj = this.GetById(id);
if (obj == null) return false;
return this.Update(obj);
}
/// <summary>
/// 根据编号修改
/// </summary>
/// <param name="id"></param>
/// <param name="mark"></param>
/// <returns></returns>
public bool UpdataStatus(int? id)
{
var obj = this.GetById(id);
if (obj == null) return false;
return this.Update(obj);
}
/// <summary>
/// 根据外键得到数据
/// </summary>
/// <param name="foreignKeyName">外键名称</param>
/// <param name="foreignKeyValue">外键的值</param>
/// <returns></returns>
public IEnumerable<T> GetByForeignKey(string foreignKeyName, Guid foreignKeyValue)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<T>(string.Format("select * from {0} where {1}=@value", typeof(T).Name, foreignKeyName), new { value = foreignKeyValue });
}
}
/// <summary>
/// 根据列查询
/// </summary>
/// <param name="fieldName">列名称</param>
/// <param name="fieldValue">列的值</param>
/// <returns></returns>
public IEnumerable<T> GetByField(string fieldName, dynamic fieldValue)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<T>(string.Format("select * from {0} where {1}=@value", typeof(T).Name, fieldName), new { value = fieldValue });
}
}
/// <summary>
/// lxh 根据某列查询的方法--带排序
/// </summary>
/// <param name="fieldName">查询列名</param>
/// <param name="fieldValue">条件内容</param>
/// <param name="sortFieldName">排序列名</param>
/// <returns></returns>
public IEnumerable<T> GetByField(string fieldName, dynamic fieldValue, string sortFieldName)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<T>(string.Format("select * from {0} where {1}=@value order by {2}", typeof(T).Name, fieldName, sortFieldName), new { value = fieldValue });
}
} /// <summary>
/// lxh 获取排序号的方法
/// </summary>
/// <returns></returns>
public int GetNextSequence(T t)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query<int>(string.Format("select isnull(max(Sequence),0)+1 from {0}", typeof(T).Name)).FirstOrDefault();
}
}
/// <summary>
/// 存储过程
/// </summary>
/// <param name="procName"></param>
/// <param name="obj"></param>
/// <returns></returns>
public List<dynamic> SelectProc(string procName, object obj = null)
{
using (var conn = ConnectionFactory.Connection)
{
return conn.Query(procName, obj, commandType: CommandType.StoredProcedure).ToList();
}
}
}
}
using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Net.Cache;using System.Text;using Dapper;using DapperExtensions;using TestData.Entity;using TestData.Business;
namespace TestData.Business{ /// <summary> /// 业务逻辑的基类 包含了一些简单的操作 /// </summary> /// <typeparam name="T"></typeparam> public abstract class BaseManager<T> where T : class, IDataEntity { /// <summary> /// 查询所有 /// </summary> /// <returns></returns> public IEnumerable<T> GetAll() { using (var conn = ConnectionFactory.Connection) { return conn.GetList<T>(); } }
/// <summary> /// 根绝sql查询 /// </summary> /// <param name="sql">sql</param> /// <param name="parameters">参数列表</param> /// <returns></returns> public IEnumerable<T> SelectCommond(string sql, object parameters = null) { using (var conn = ConnectionFactory.Connection) { return conn.Query<T>(sql, parameters); } } /// <summary> /// 根据表明查询 /// </summary> /// <param name="name"></param> /// <returns></returns> public IEnumerable<T> GetAll(string name) { using (var conn = ConnectionFactory.Connection) { return conn.Query<T>(string.Format("select * from {0}", name)); } } /// <summary> /// 根据编号查询 /// </summary> /// <param name="id"></param> /// <returns></returns> public T GetById(int? id) { if (id == null) return default(T); using (var conn = ConnectionFactory.Connection) {
return conn.Get<T>(id.Value); } } /// <summary> /// 修改实体 /// </summary> /// <param name="t">实体对象</param> /// <returns></returns> public bool Update(T t) { using (var conn = ConnectionFactory.Connection) { t.EditorDate = DateTime.Now; return conn.Update(t); } }
/// <summary> /// 得到数量 /// </summary> /// <returns></returns> public int GetCount() { using (var conn = ConnectionFactory.Connection) { return conn.Count<T>(null); } }
/// <summary> /// 分页 /// </summary> /// <param name="predicate"></param> /// <param name="pageindex"></param> /// <param name="pageSize"></param> /// <returns></returns> public Tuple<int, IEnumerable<T>> GetPaged(object predicate, int pageindex, int pageSize) { using (var conn = ConnectionFactory.Connection) { var sort = new List<ISort> { Predicates.Sort<T>(p=>p.EditorDate) };
var total = conn.Count<T>(predicate); return new Tuple<int, IEnumerable<T>>(total, conn.GetPage<T>(predicate, sort, pageindex, pageSize).ToList()); } } /// <summary> /// 添加 /// </summary> /// <param name="t">实体对象</param> /// <returns></returns> public bool Insert(T t) { t.EditorDate = DateTime.Now; return this.Add(t, false) == t.Id; } /// <summary> /// 添加实体集合 /// </summary> /// <param name="list"></param> /// <returns></returns> public bool Insert(List<T> list) { using (var conn = ConnectionFactory.Connection) { list.ForEach(p => p.EditorDate = DateTime.Now); return conn.Insert(list); } }
/// <summary> /// 添加实体 /// </summary> /// <param name="t">实体对象</param> /// <param name="isAutoGenId"></param> /// <returns></returns> public int Add(T t, bool isAutoGenId = true) { using (var conn = ConnectionFactory.Connection) { //var maxindex = conn.Query<int?>(string.Format("select max(indexs) from {0}", typeof(T).Name)).FirstOrDefault() ?? 0; //t.Indexs = maxindex + 1; return conn.Insert(t, isGenId: isAutoGenId); } } /// <summary> /// 根据编号删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool Delete(int? id) { var obj = this.GetById(id); if (obj == null) return false; return this.Update(obj); } /// <summary> /// 根据编号修改 /// </summary> /// <param name="id"></param> /// <param name="mark"></param> /// <returns></returns> public bool UpdataStatus(int? id) { var obj = this.GetById(id); if (obj == null) return false; return this.Update(obj); } /// <summary> /// 根据外键得到数据 /// </summary> /// <param name="foreignKeyName">外键名称</param> /// <param name="foreignKeyValue">外键的值</param> /// <returns></returns> public IEnumerable<T> GetByForeignKey(string foreignKeyName, Guid foreignKeyValue) { using (var conn = ConnectionFactory.Connection) { return conn.Query<T>(string.Format("select * from {0} where {1}=@value", typeof(T).Name, foreignKeyName), new { value = foreignKeyValue }); } } /// <summary> /// 根据列查询 /// </summary> /// <param name="fieldName">列名称</param> /// <param name="fieldValue">列的值</param> /// <returns></returns> public IEnumerable<T> GetByField(string fieldName, dynamic fieldValue) { using (var conn = ConnectionFactory.Connection) { return conn.Query<T>(string.Format("select * from {0} where {1}=@value", typeof(T).Name, fieldName), new { value = fieldValue }); } } /// <summary> /// lxh 根据某列查询的方法--带排序 /// </summary> /// <param name="fieldName">查询列名</param> /// <param name="fieldValue">条件内容</param> /// <param name="sortFieldName">排序列名</param> /// <returns></returns> public IEnumerable<T> GetByField(string fieldName, dynamic fieldValue, string sortFieldName) { using (var conn = ConnectionFactory.Connection) { return conn.Query<T>(string.Format("select * from {0} where {1}=@value order by {2}", typeof(T).Name, fieldName, sortFieldName), new { value = fieldValue }); } }
/// <summary> /// lxh 获取排序号的方法 /// </summary> /// <returns></returns> public int GetNextSequence(T t) { using (var conn = ConnectionFactory.Connection) { return conn.Query<int>(string.Format("select isnull(max(Sequence),0)+1 from {0}", typeof(T).Name)).FirstOrDefault(); } } /// <summary> /// 存储过程 /// </summary> /// <param name="procName"></param> /// <param name="obj"></param> /// <returns></returns> public List<dynamic> SelectProc(string procName, object obj = null) { using (var conn = ConnectionFactory.Connection) { return conn.Query(procName, obj, commandType: CommandType.StoredProcedure).ToList(); } } }}
比较好的Dapper封装的仓储实现类 来源:https://www.cnblogs.com/liuchang/articles/4220671.html的更多相关文章
- OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现
最近趁着不忙,在构思一个搭建一个开源的完整项目,至于原因以及整个项目框架后边文章我再说明.既然要起一个完整的项目,那么数据仓储访问就必不可少,这篇文章我主要介绍这个新项目(OSS.Core)中我对仓储 ...
- .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要 ...
- 同时支持EF+Dapper的混合仓储,助你快速搭建数据访问层
背景 17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论.项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具:而在线业 ...
- .Net Core中使用Dapper构建泛型仓储
前言:Dapper是.NET的简单对象映射器,在速度方面拥有ORM之王的称号,与使用原始ADO.NET读取数据一样快.ORM是对象关系映射器,它负责数据库和编程语言之间的映射. 仓储主要是用来解耦业务 ...
- 基于EFCore3.0+Dapper 封装Repository
Wei.Repository 基于EFCore3.0+Dapper 封装Repository,实现UnitOfWork,提供基本的CURD操作,可直接注入泛型Repository,也可以继承Repos ...
- EsayUI + MVC + ADO.NET(仓储基类)
该篇主要讲解工作单元的运用 和DbHlper抽象封装 工作单元仓储基类:BaseRepository (DbHlper抽象封装) 仓储接口(CRUD):IRepository (CRUD接口) ...
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
随机推荐
- Windows环境下配置thrift编译器(VS2015)
参考官方文档:http://svn.apache.org/repos/asf/thrift/attic/trunk/compiler/cpp/README_Windows.txt 编译器( ...
- JS对以对象组成的数组去重
这是从https://segmentfault.com/q/1010000006954351参考的,达到了我要去重的功能!!! var hash = {};//arr是要去重的对象数组 arr = a ...
- Windows 错误 0x80070570
Windows程序运行或者删除文件提示错误0x80070570:文件或目录损坏且无法读取. 环境 Windows 10 解决办法 管理员权限打开cmd,输入chkdsk 盘符: /f,提示输入Y,修复 ...
- (2)pyspark建立RDD以及读取文件成dataframe
别人的相关代码文件:https://github.com/bryanyang0528/hellobi/tree/master/pyspark 1.启动spark (1)SparkSession 是 S ...
- javaScript(其他引用类型对象)
javascript其他引用类型对象 Global对象(全局)这个对象不存在,无形的对象,无法new一个 其内部定义了一些方法和属性:如下 encodeURI str = www.baidu.com ...
- HDU-5534 Partial Tree 完全背包 设定初始选择
题目链接:https://cn.vjudge.net/problem/HDU-5534 题意 放学路上看到n个节点,突然想把这几个节点连成一颗树. 树上每个节点有一个清凉度,清凉度是一个关于节点度的函 ...
- nginx1.15.8源码安装
useradd www -s /sbin/nologin -M yum -y install gcc pcre-devel openssl-devel cd /usr/local/src wget ...
- ARM - Linux嵌入式C/C++各种资料分享【更新日期:2012/04/24】
http://blog.csdn.net/shuxiao9058/article/details/6786868 由于115网盘取消大众分享功能,因此不能继续分享下载链接.更新资料将在本人分享空间转存 ...
- 【转】C语言将字符串转换成对应的数字(十进制、十六进制)
转自:http://wawlian.iteye.com/blog/1315133 1.一个十进制数字的字符串表示转换成对应的整数.举例:将“1234”转换成整数1234 /*将字符串s转换成相应的整数 ...
- onkeydown、onkeypress、onkeyup、onblur、onchange、oninput、onpropertychange的区别
onkeydown:按下任何键(字母.数字.系统.tab等)都能触发,且对于字母不区分大小写: onkeypress:按下字母.数字键时触发,且对于字母区分大小写; onkeyup:相应的键和onke ...