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


结束


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


目录
相关文章
|
7月前
|
缓存 安全 Java
|
设计模式 Cloud Native JavaScript
掌握Go类型内嵌:设计模式与架构的新视角1
掌握Go类型内嵌:设计模式与架构的新视角
75 0
|
设计模式 编译器 Go
掌握Go类型内嵌:设计模式与架构的新视角2
掌握Go类型内嵌:设计模式与架构的新视角
72 0
|
SQL 关系型数据库 Go
Go语言微服务框架 - 12.ORM层的自动抽象与自定义方法的扩展
随着接口参数校验功能的完善,我们能快速定位到接口层面的参数问题;而应用服务的分层代码,也可以通过log的trace-id发现常见的业务逻辑问题。 但在最底层与数据库的操作,也就是对GORM的使用,经常会因为我们不了解ORM的一些细节,导致对数据的CRUD失败,或者没有达到预期效果。这时,我们希望能在ORM这一层也有一个通用的解决方案,来加速问题的排查。
90 0
|
关系型数据库 MySQL Go
Go语言微服务框架 - 8.Gormer迭代-定制专属的ORM代码生成工具
我们对比一下GORM库提供的`gorm.Model`,它在新增、修改时,会自动修改对应的时间,这个可以帮我们减少很多重复性的代码编写。这里,我就针对现有的gormer工具做一个示例性的迭代。
104 0
|
1月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
33 2
|
SQL C# 数据库
推荐一个Dapper扩展CRUD基本操作的开源库
推荐一个Dapper扩展CRUD基本操作的开源库
98 0
|
Python
Python编程:lambda替代品-operator模块
代码中不是很推荐使用 lambda表达式 取而代之的是 operator模块,提供了很多简单函数实现
69 0
|
uml
封装自己的dapper lambda扩展-设计篇(一)
封装自己的dapper lambda扩展-设计篇(一)
236 0
封装自己的dapper lambda扩展-设计篇(一)
封装自己的dapper lambda扩展-设计篇(二)
封装自己的dapper lambda扩展-设计篇(二)
236 0
封装自己的dapper lambda扩展-设计篇(二)