去年我在业余时间,自己整了一套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操作的,可以在合理的场景下使用异步方法提高应用处理并发能力。支持方法有:

  1. ToListAsync

  2. GetAsync

  3. InsertAsync

  4. DeleteAsync

  5. UpdateSelectAsync

  6. 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相关推荐

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

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

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

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

  3. 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体

    LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法 开源地址 https://github.com/liningit/LnskyDB 在此非常感谢SkyC ...

  4. dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了

    一:背景 1. 讲故事 前几天看公司一个新项目的底层使用了dapper,大家都知道dapper是一个非常强大的半自动化orm,帮程序员解决了繁琐的mapping问题,用起来非常爽,但我还是遇到了一件非 ...

  5. 轻量级ORM框架Dapper应用二:使用Dapper实现CURD操作

    在上一篇文章中,讲解了如何安装Dapper,这篇文章中将会讲解如何使用Dapper使用CURD操作. 例子中使用到的实体类定义如下: 1 using System; 2 using System.Co ...

  6. c#v2.0 扩展特性 翻译(1)

    c#v2.0 扩展特性 翻译(1) Introduction to C# 2.0 C# 2.0 introduces several language extensions, the most imp ...

  7. 即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0

    介绍 OpenIM开发团队花费了2个月时间,加班加点对代码进行了局部重构,优化代码结构,规范代码开发流程,为社区未来深度参与开发打好基础.由于改动较大,涉及大量的测试工作,并且还有打包 发布 等一些琐 ...

  8. dboxShare 开源企业网盘系统v2.0.0.2011

    介绍: dboxShare是基于 .NET 的开源企业级网盘系统,提供简便易用.安全可靠的文件云存储.云管理.云共享和云协作解决方案. dboxShare 从v2.0 开始正式开源,系统基于 .NET ...

  9. 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. ...

最新文章

  1. 拿到腾讯字节快手 offer 后,他的 LeetCode 刷题经验在 GitHub 火了!
  2. Script标签的async和defer
  3. c语言指针概述,C语言指针概述.doc
  4. 前端学习(3164):react-hello-react之添加todoList
  5. qt 获取本机的wifi密码_还在记密码?这款开源免费的账号密码管理神器赶紧收了...
  6. luoguP4242树上的毒瘤
  7. Windows安全不能靠本地管理员权限
  8. 《FLUENT 14.0超级学习手册》——3.2 Gambit的应用
  9. 2012 ServerStandardEval 激活
  10. EKS使用AWS EFS CSI
  11. 使用 Gitee 进行代码管理
  12. 如何零成本实现微信公众号自助查券返利机器人(五)
  13. 自动化测试是什么?为什么要做自动化测试?
  14. PostgreSQL数据库进程数据结构——ProcGlobal
  15. hanlp简单DEMO
  16. 编程之美-翻烙饼问题
  17. 《AlgoPlus使用手册》之全天候模拟测试
  18. Prophet学习(五)季节性、假日效应和回归因子
  19. arduino舵机门锁 红外遥控控制 刷卡 diy
  20. IBM V7000存储配置

热门文章

  1. vue使用process.env搭建自定义运行环境
  2. 中输入learn_Scikit-learn新版本发布,一行代码秒升级
  3. 机器视觉技术在表面缺陷检测方面的发展趋势
  4. 在Kubernetes集群上部署和管理JFrog Artifactory
  5. 分布式服务下的关键技术(转)
  6. 基于Azure Blob冷存储的数据压缩备份总结
  7. POJ3751 时间日期格式转换【日期计算】
  8. nobelking 3 js 数字和数字相加 字符串连接 数字和字符串连接1
  9. video.js html5 视频播放器
  10. .NET6之MiniAPI(五):选项