开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库。随之开源后,有不少朋友也对此做了试用,也对我这个项目提出了不少的建议。因此我在最近公司业务不怎么繁忙的情况下,对朋友们的建议和我的想法做了一个总结,然后花了一个星期的时间对项目进行了重构与升级,希望该项目能帮助到有需要的人。
如果您对它有兴趣,欢迎大家提交Pull Request代码变更,如果有任何问题可提交issue进行讨论。当然也可以在下方评论和QQ私聊给我。为该文章点个推荐或者给项目点star都是给我最大的动力与支持,谢谢。
源码
https://github.com/SkyChenSky/Sikiro.Dapper.Extension
文档
具体使用可以查看文档:
https://github.com/SkyChenSky/Sikiro.Dapper.Extension/wiki
该项目主要目的是通过使用lambda表达式达到以下效果:
提高开发效率
强类型。
智能提示
编译错误提示
该扩展主要解决重复性较大的简单查询,因此并不提供链表(JOIN)操作,如果是简单的链表可以通过编写视图,再使用该扩展组件。如果是复杂查询,建议手写SQL+原生Dapper方法。
数据库支持
原本项目名为Sikiro.DapperLambdaExtension.MsSql,现更名为Sikiro.Dapper.Extension,同时支持三种数据库 MsSQL、MySQL、PostgreSQL。
MsSql
PM> Install-Package Sikiro.Dapper.Extension.MsSql
MySql
PM> Install-Package Sikiro.Dapper.Extension.MySql
PostgreSql
PM> Install-Package Sikiro.Dapper.Extension.PostgreSql
异步方法支持
对于数据库访问这种强I/O操作的,可以在合理的场景下使用异步方法提高应用处理并发能力。支持方法有:
ToListAsync
GetAsync
InsertAsync
DeleteAsync
UpdateSelectAsync
UpdateAsync
框架重构
框架主要分为两部分:
Sikiro.Dapper.Extension 为公共抽象库,主要是接口、抽象类与公共方法
Sikiro.Dapper.Extension.XXX 为具体实现库,主要是重写不同数据库的特性与语句组合。
Sikiro.Dapper.Extension 类图
Sikiro.Dapper.Extension.MsSql类图
链式风格
Query
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);
Command
con.CommandSet<SysUser>().Where(a => a.Email == "287245177@qq.com").Update(a => new SysUser { Email = "123456789@qq.com" });
忠于原生的特性标签
不标新立异,方便替换组件
[Table("SYS_USER")] [Key] [Required] [StringLength(32)] [Display(Name = "主键")] [Column("SYS_USERID")] [DatabaseGenerated]
高并发处理的UpdateSelect
该方法主要用于把符合条件的数据更新后并查询出来,并通过READPAST过滤了已被锁的数据。具体所生成的SQL语句如下:
UPDATE TOP ( 100 ) SYS_USER WITH ( UPDLOCK, READPAST )SET USER_STATUS = 1OUTPUT INSERTED.[USER_NAME] , INSERTED.SYS_USERID , INSERTED.EMAILFROM SYS_USERWHERE CREATE_DATETIME < '2018-09-13' AND USER_STATUS = 2;
那么该方法有他的使用场景,在我们公司现有业务,资金定时服务就是通过使用UpdateSelect方法轮询数据源,把需要处理的数据库先UpdateSelect成一个中间状态,然后再与第三方接口做交互处理,假如此时有多个资金定时服务并行去跑,A-Job会跑取前100条数据,B-Job会因为READPAST的原因过滤了A-JOB所锁的前1-100条而读取了第101-200条数据进行处理。因此当业务量增多,只需要把资金定时服务再部署多一台服务器即可。
2年前也是在业余时间,自己基于Visual Studio SDK写了一个实体成的VS 插件。本工具也是开源的,并很好与Sikiro.Dapper.Extension配合使用,当然也是非必要的可独立使用。
github地址:https://github.com/SkyChenSky/AutoBuildEntity
如果也想开发类似项目的朋友,也可以参考我以前写过的三篇文章:
封装自己的dapper lambda扩展-设计篇
编写自己的dapper lambda扩展-使用篇
表达式树的解析.
原文链接:https://www.cnblogs.com/skychen1218/p/10600424.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0相关推荐
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍
LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://liningit.githu ...
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础
LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://liningit.githu ...
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体
LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法 开源地址 https://github.com/liningit/LnskyDB 在此非常感谢SkyC ...
- dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
一:背景 1. 讲故事 前几天看公司一个新项目的底层使用了dapper,大家都知道dapper是一个非常强大的半自动化orm,帮程序员解决了繁琐的mapping问题,用起来非常爽,但我还是遇到了一件非 ...
- 轻量级ORM框架Dapper应用二:使用Dapper实现CURD操作
在上一篇文章中,讲解了如何安装Dapper,这篇文章中将会讲解如何使用Dapper使用CURD操作. 例子中使用到的实体类定义如下: 1 using System; 2 using System.Co ...
- c#v2.0 扩展特性 翻译(1)
c#v2.0 扩展特性 翻译(1) Introduction to C# 2.0 C# 2.0 introduces several language extensions, the most imp ...
- 即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0
介绍 OpenIM开发团队花费了2个月时间,加班加点对代码进行了局部重构,优化代码结构,规范代码开发流程,为社区未来深度参与开发打好基础.由于改动较大,涉及大量的测试工作,并且还有打包 发布 等一些琐 ...
- dboxShare 开源企业网盘系统v2.0.0.2011
介绍: dboxShare是基于 .NET 的开源企业级网盘系统,提供简便易用.安全可靠的文件云存储.云管理.云共享和云协作解决方案. dboxShare 从v2.0 开始正式开源,系统基于 .NET ...
- Teddy's Knowledge Base--基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V2.0.0 [开源]...
Teddy's Knowledge Base--基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V2.0.0 [开源] 基于.Net 2.0 (C# 2. ...
最新文章
- 拿到腾讯字节快手 offer 后,他的 LeetCode 刷题经验在 GitHub 火了!
- Script标签的async和defer
- c语言指针概述,C语言指针概述.doc
- 前端学习(3164):react-hello-react之添加todoList
- qt 获取本机的wifi密码_还在记密码?这款开源免费的账号密码管理神器赶紧收了...
- luoguP4242树上的毒瘤
- Windows安全不能靠本地管理员权限
- 《FLUENT 14.0超级学习手册》——3.2 Gambit的应用
- 2012 ServerStandardEval 激活
- EKS使用AWS EFS CSI
- 使用 Gitee 进行代码管理
- 如何零成本实现微信公众号自助查券返利机器人(五)
- 自动化测试是什么?为什么要做自动化测试?
- PostgreSQL数据库进程数据结构——ProcGlobal
- hanlp简单DEMO
- 编程之美-翻烙饼问题
- 《AlgoPlus使用手册》之全天候模拟测试
- Prophet学习(五)季节性、假日效应和回归因子
- arduino舵机门锁 红外遥控控制 刷卡 diy
- IBM V7000存储配置
热门文章
- vue使用process.env搭建自定义运行环境
- 中输入learn_Scikit-learn新版本发布,一行代码秒升级
- 机器视觉技术在表面缺陷检测方面的发展趋势
- 在Kubernetes集群上部署和管理JFrog Artifactory
- 分布式服务下的关键技术(转)
- 基于Azure Blob冷存储的数据压缩备份总结
- POJ3751 时间日期格式转换【日期计算】
- nobelking 3 js 数字和数字相加 字符串连接 数字和字符串连接1
- video.js html5 视频播放器
- .NET6之MiniAPI(五):选项