编写自己的dapper lambda扩展-使用篇
前言
这是针对dapper的一个扩展,支持lambda表达式的写法,链式风格让开发者使用起来更加优雅、直观。现在暂时只有MsSql的扩展,也没有实现事务的写法,将会在后续的版本补充。
这是个人业余的开源小项目,如果大家有更好的实现方式和好的建议欢迎拍砖
本项目已经在github上开源了:Sikiro.DapperLambdaExtension.MsSql
去年写了《整理自己的.net工具库》,里面提供的源码重新发布到了github并用新的项目名Sikiro.Tookits
这两个项目都发布到Nuget上了,可以在Nuget搜索Sikiro可以全部查看到
另外该项目会用到一些表达式树的知识,如果有兴趣的朋友可以先去了解,我之前也写过一篇简单的文章《表达式树的解析.》
下面是简单的使用介绍
开始
Nuget
你可以运行以下下命令在你的项目中安装 Sikiro.DapperLambdaExtension.MsSql。
PM> Install-Package Sikiro.DapperLambdaExtension.MsSql
SqlConnection
var con = new SqlConnection("Data Source=192.168.13.46;Initial Catalog=SkyChen;Persist Security Info=True;User ID=sa;Password=123456789");
定义User
[Table("SYS_USER")]
public class SysUser
{
/// <summary>
/// 主键
/// </summary>
[Key]
[Required]
[StringLength(32)]
[Display(Name = "主键")]
[Column("SYS_USERID")]
public string SysUserid { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Required]
[Display(Name = "创建时间")]
[Column("CREATE_DATETIME")]
public DateTime CreateDatetime { get; set; }
/// <summary>
/// 邮箱
/// </summary>
[Required]
[StringLength(32)]
[Display(Name = "邮箱")]
[Column("EMAIL")]
public string Email { get; set; }
/// <summary>
/// USER_STATUS
/// </summary>
[Required]
[Display(Name = "USER_STATUS")]
[Column("USER_STATUS")]
public int UserStatus { get; set; }
}
Insert
con.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
当不存在某条件记录Insert
con.CommandSet<SysUser>().IfNotExists(a => a.Email == "287245177@qq.com").Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
UPDATE
您可以根据某个条件把指定字段更新
con.CommandSet<SysUser>().Where(a => a.Email == "287245177@qq.com").Update(a => new SysUser { Email = "123456789@qq.com" });
也可以根据主键来更新整个实体字段信息
User.Email = "123456789@qq.com";
condb.CommandSet<SysUser>().Update(User);
DELETE
您可以根据条件来删除数据
con.CommandSet<SysUser>().Where(a => a.Email == "287245177@qq.com").Delete()
QUERY
GET
获取过滤条件的一条数据(第一条)
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Get()
TOLIST
当然我们也可以查询出符合条件的数据集
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").OrderBy(b => b.Email).Top(10).Select(a => a.Email).ToList();
PAGELIST
还有分页
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com")
.OrderBy(a => a.CreateDatetime)
.Select(a => new SysUser { Email = a.Email, CreateDatetime = a.CreateDatetime, SysUserid = a.SysUserid })
.PageList(1, 10);
UPDATESELECT
先更新再把结果查询出来
con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com")
.OrderBy(a => a.CreateDatetime)
.Select(a => new SysUser { Email = a.Email })
.UpdateSelect(a => new SysUser { Email = "2530665632@qq.com" });
事务功能
con.Transaction(tc =>
{
var sysUserid = tc.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Select(a => a.SysUserid).Get();
tc.CommandSet<SysUser>().Where(a => a.SysUserid == sysUserid).Delete();
tc.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
Mobile = "13536059332",
RealName = "大笨贞",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "fengshuzhen",
UserStatus = 1,
UserType = 1,
Password = "asdasdad"
});
});
最后来一个完整的DEMO
using (var con = new SqlConnection("Data Source=192.168.13.46;Initial Catalog=SkyChen;Persist Security Info=True;User ID=sa;Password=123456789"))
{
con.CommandSet<SysUser>().Insert(new SysUser
{
CreateDatetime = DateTime.Now,
Email = "287245177@qq.com",
SysUserid = Guid.NewGuid().ToString("N"),
UserName = "chengong",
});
var model = con.QuerySet<SysUser>().Where(a => a.Email == "287245177@qq.com").Get();
con.CommandSet<SysUser>().Where(a => a.SysUserid == model.SysUserid)
.Update(a => new SysUser { Email = "2548987@qq.com" });
con.CommandSet<SysUser>().Where(a => a.SysUserid == model.SysUserid).Delete();
}
其他
除了简单的CURD还有Count、Sum、Exists
结束
第一个版本有未完善的地方,如果大家有很好的建议欢迎随时向我提,希望得到大家的建议后能良好的改善升级
编写自己的dapper lambda扩展-使用篇的更多相关文章
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- 封装自己的dapper lambda扩展-设计篇
前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...
- 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...
- 基于Dapper的开源Lambda扩展LnskyDB 3.0已支持Mysql数据库
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.,现在已经支持MySql和Sql serv ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
转载:http://zh.lucida.me/blog/java-8-lambdas-inside-out-library-features/ 关于 深入理解 Java 8 Lambda(语言篇——l ...
随机推荐
- ubuntu 配置拼音输入法步骤
今天配置了一下 ubuntu 拼音,要求使用ubuntu 内置拼音.大致步骤我记录一下: 配置拼音,使用 ibus pinyin,网上有很多帖子大致步骤: 1)安装 中文语言 2)安装ibus 3) ...
- 百度-淘宝-360搜索引擎搜索API
百度(baidu) Api地址:http://suggestion.baidu.com/su?wd=设计&p=3&cb=window.bdsug.sug window.bdsug.su ...
- KVM网络桥接模式解说
在上一篇博客中,我画了一张图来解说桥接模式下kvm的网络是什么样子的.那今天我就仔细来解释一下这方面的内容,让大家学会配置桥接网络. 还是这样的一张图,我们知道bridge就是桥接网卡的名称.让虚拟机 ...
- 3.3Python数据处理篇之Numpy系列(三)---数组的索引与切片
目录 (一)数组的索引与切片 1.说明: 2.实例: (二)多维数组的索引与切片 1.说明: 2.实例: 目录: 1.一维数组的索引与切片 2.多维数组的索引与切片 (一)数组的索引与切片 1.说明: ...
- 3.1Python数据处理篇之Numpy系列(一)---ndarray对象的属性与numpy的数据类型
目录 目录 (一)简单的数组创建 1.numpy的介绍: 2.numpy的数组对象ndarray: 3.np.array(list/tuple)创建数组: (二)ndarray对象的属性 1.五个常用 ...
- 16LaTeX学习系列之---LaTeX数学公式的补充
目录 目录 前言 (一)知识点说明 1.基础细节 2.gather环境 3.align环境 4.split环境 5.cases环境 (二)实例 1.源代码 2.输出效果 目录 本系列是有关LaTeX的 ...
- mybatis隐藏不用的sql
在mybatis的xml中,选中了不用的sql语句,使用ctrl + shift + / 隐去,,结果是 <where> <if test="dto.startTime ! ...
- js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- Mac OS X 下优化 Terminal,一篇就够了!
先上最终效果图: 目录 目录 1. 相关工具介绍 2. 配置总览 3. 安装步骤 3.1. 安装 iTerm2 3.2. 安装XCode's Command line tools 3.3. 检查 zs ...
- centos7下安装docker(12.3容器之间的连通性)
我们接着盗图,如下: 在这张图上,可以看到,如果两个容器使用同一个bridge,那么两个容器之间是互相能通的 可以看到两个容器在同一个bridge下是可以互相ping通的 当两个容器在不同的bridg ...