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


前言

這是針對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

結束

第一個版本有未完善的地方,如果大家有很好的建議歡迎隨時向我提,希望得到大家的建議后能良好的改善升級


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM