日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源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
    = 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

      如果也想開發類似項目的朋友,也可以參考我以前寫過的三篇文章:

    • 封裝自己的dapper lambda擴展-設計篇

    • 編寫自己的dapper lambda擴展-使用篇

    • 表達式樹的解析.

    原文鏈接:https://www.cnblogs.com/skychen1218/p/10600424.html

    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。