前言

这是针对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扩展-使用篇的更多相关文章

  1. 【转】.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 ...

  2. 封装自己的dapper lambda扩展-设计篇

    前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...

  3. 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0

    前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...

  4. 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...

  5. 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...

  6. 基于Dapper的开源Lambda扩展LnskyDB 3.0已支持Mysql数据库

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.,现在已经支持MySql和Sql serv ...

  7. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  8. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  9. 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)

    转载:http://zh.lucida.me/blog/java-8-lambdas-inside-out-library-features/ 关于 深入理解 Java 8 Lambda(语言篇——l ...

随机推荐

  1. JAVA学习笔记:注释、变量的声明和定义、

    本文内容: 注释 变量的声明和定义 成员变量和局部变量 首发时间:2018-03-16 15:59 注释: 单行注释:// 多行注释:/* - */ 变量: 变量是内存中的一个存储区域,变量的定义就是 ...

  2. LeetCode题解之Second Minimum Node In a Binary Tree

    1.题目描述 2.问题分析 使用set. 3.代码 set<int> s; int findSecondMinimumValue(TreeNode* root) { dfs(root); ...

  3. [20170824]11G备库启用DRCP连接.txt

    [20170824]11G备库启用DRCP连接.txt --//参考链接:http://blog.itpub.net/267265/viewspace-2099397/blogs.oracle.com ...

  4. linux下zip文件解压乱码的问题

    因为编码问题,zip文件中的中文文件在linux下解压会出现乱码 如果你使用archlinux那么使用AUR安装unzip-natspec就可以解决这个问题 https://aur.archlinux ...

  5. Linux 装机必备工具

    linux 装机必备工具:安装这些基本能满足日常需求. #!/usr/bin/env sh   echo "Env"       # vim   # tmux   # ssh   ...

  6. PHP 服务器及TP5框架遇到的几个错误

    一.Call to undefined function imagecreatefrompng(): LAMP环境搭建的博客,在提交内容的时候TP5框架报了一个错误,Call to undefined ...

  7. PyQt5--QComboBox

    # -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...

  8. 理解OSI参考模型

    在一个视频网站上不小心搜到网络知识的视频,突然以前大学的没有真正接受的知识点,一下子豁然开朗,赶紧整理了下笔记. 一.OSI参考模型 自下而上:物理层(物理介质,比特流).数据链路层(网卡.交换机). ...

  9. UCML JS函数说明

    UCML JS函数说明1.调用父窗体函数 window.openerWindow.函数名 2.公用JS存放位置 BPObject\Model\Rule\initvalue.js 3.弹窗JS var ...

  10. 转载 SpringMVC详解(一)------入门实例

    目录 1.什么是 SpringMVC ? 2.创建 web 工程,并导入相应的 jar 包. 3.新建 SpringMVC 全局配置文件 4.在 web.xml 文件中配置前端过滤器 5.编写处理器  ...