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


结束


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


目录
相关文章
|
消息中间件 监控 数据可视化
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
influxDB的官网下载地址 https://portal.influxdata.com/downloads/打开以后,如下图所示,可以选择版本号,以及平台。此处咱们选择windows平台。不过此处没有实际的可以下载的地方,着实比较过分,不过咱们可以另辟蹊径。
1838 0
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
深入浅出阿里数据同步神器:Canal原理+配置+实战全网最全解析!
canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
|
jenkins 持续交付 开发工具
Jenkins - 一篇就能上手 Gitee(码云)代码自动化构建
Jenkins - 一篇就能上手 Gitee(码云)代码自动化构建
1607 0
Jenkins - 一篇就能上手 Gitee(码云)代码自动化构建