去年我在业余时间,本身整了一套dapper的lambda表达式的封装,本来是做为了一个我的的娱乐项目,当时也只支持了Sql Server数据库。随之开源后,有很多朋友也对此作了试用,也对我这个项目提出了很多的建议。所以我在最近公司业务不怎么繁忙的状况下,对朋友们的建议和个人想法作了一个总结,而后花了一个星期的时间对项目进行了重构与升级,但愿该项目能帮助到有须要的人。html
若是您对它有兴趣,欢迎你们提交Pull Request代码变动,若是有任何问题可提交issue进行讨论。固然也能够在下方评论和QQ私聊给我。为该文章点个推荐或者给项目点star都是给我最大的动力与支持,谢谢。git
https://github.com/SkyChenSky/Sikiro.Dapper.Extensiongithub
具体使用能够查看文档:数据库
https://github.com/SkyChenSky/Sikiro.Dapper.Extension/wiki服务器
该项目主要目的是经过使用lambda表达式达到如下效果:并发
该扩展主要解决重复性较大的简单查询,所以并不提供链表(JOIN)操做,若是是简单的链表能够经过编写视图,再使用该扩展组件。若是是复杂查询,建议手写SQL+原生Dapper方法。app
本来项目名为Sikiro.DapperLambdaExtension.MsSql,现改名为Sikiro.Dapper.Extension,同时支持三种数据库 MsSQL、MySQL、PostgreSQL。框架
PM> Install-Package Sikiro.Dapper.Extension.MsSql
PM> Install-Package Sikiro.Dapper.Extension.MySql
PM> Install-Package Sikiro.Dapper.Extension.PostgreSql
对于数据库访问这种强I/O操做的,能够在合理的场景下使用异步方法提升应用处理并发能力。支持方法有:异步
框架主要分为两部分:高并发
Sikiro.Dapper.Extension 为公共抽象库,主要是接口、抽象类与公共方法
Sikiro.Dapper.Extension.XXX 为具体实现库,主要是重写不一样数据库的特性与语句组合。
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);
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]
该方法主要用于把符合条件的数据更新后并查询出来,并经过READPAST过滤了已被锁的数据。具体所生成的SQL语句以下:
UPDATE TOP ( 100 ) SYS_USER WITH ( UPDLOCK, READPAST ) SET USER_STATUS = 1 OUTPUT INSERTED.[USER_NAME] , INSERTED.SYS_USERID , INSERTED.EMAIL FROM SYS_USER WHERE 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
若是也想开发相似项目的朋友,也能够参考我之前写过的三篇文章: