编写自己的dapper lambda扩展-使用篇

简介: 编写自己的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


结束


第一个版本有未完善的地方,如果大家有很好的建议欢迎随时向我提,希望得到大家的建议后能良好的改善升级


目录
相关文章
|
10月前
|
设计模式 算法 编译器
Go方法特性详解:简单性和高效性的充分体现2
Go方法特性详解:简单性和高效性的充分体现
56 0
|
7天前
|
Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第3天】在Python的世界里,装饰器是那些静悄悄站在角落、却能大大改变游戏规则的神奇工具。它们就像是给你的函数穿上一件隐形的超级英雄斗篷,让函数拥有了超乎寻常的能力。本文将带领你一探究竟,看看如何通过几行简单的代码,就能让你的函数变得更加智能和强大。
|
11天前
|
测试技术 Python
Python中的装饰器:简化代码,增强功能
【8月更文挑战第31天】装饰器在Python中是一种强大的工具,它允许我们在不修改函数代码的情况下增加额外的功能。本文将介绍装饰器的基础知识、如何创建自定义装饰器,并通过实际示例展示其在日志记录和性能测试中的应用。
|
3月前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged(&quot;INFO&quot;, &quot;msg&quot;)`,允许动态定制功能。
28 6
|
3月前
|
Python
掌握Python Lambda:简化代码,提升效率!
掌握Python Lambda:简化代码,提升效率!
|
11月前
|
Kubernetes Shell Go
Go编程模式 - 7-代码生成
良好的命名能体现出其价值。尤其是在错误码的处理上,无需再去查询错误码对应的错误内容,直接可以通过命名了解。
50 0
|
Java 开发者
5.1 Lambda表达式在框架和库中的应用:使用Lambda表达式简化GUI编程
5.1 Lambda表达式在框架和库中的应用:使用Lambda表达式简化GUI编程
57 0
|
Python
Python编程:lambda替代品-operator模块
代码中不是很推荐使用 lambda表达式 取而代之的是 operator模块,提供了很多简单函数实现
58 0
|
自然语言处理 Java Scala
Scala实现DSL的框架案例
Scala实现DSL的框架案例
|
uml
封装自己的dapper lambda扩展-设计篇(一)
封装自己的dapper lambda扩展-设计篇(一)
221 0
封装自己的dapper lambda扩展-设计篇(一)