前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

简介

作者头像
跟着阿笨一起玩NET
发布2023-03-13 11:15:35
6850
发布2023-03-13 11:15:35
举报

简介

Dapper是介于Entity framework与ADO的折中选择。既满足手写查询的高性能需求,又简化了数据库对象映射为内存对象的繁杂工作。Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化。

为什么使用Dapper.Contrib

如果仅仅使用Dapper,要对一个对象进行insert操作需要如下操作

代码语言:javascript
复制
 using (var connection = new SqlConnection("链接字符串"))
{
       var users = connection.Execute("insert into Demo (Name,Age) values('张三',23)");
}

Dapper.Contrib不需要写sql,操作对象即可

代码语言:javascript
复制
using (var connnection = DbHelper.GetConnection())
{
      var result = connnection.Insert(new Demo
       {
            Age = 23,
            Name = "张三",
       });
}

 使用Dapper.Contrib

工欲善其事,必先利其器。要想不写sql愉快地增删改当然需要前期地配置。

entity配置

代码语言:javascript
复制
    [Table("Demo")]
    public class Demo
    {
        [Key] //不是自动增长主键时使用ExplicitKey
        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        [Computed]
        public int ComputedAge => Age * 2;

        [Write(false)]
        public int NoWriteCol { get; set; }

    }

上面的Demo类里面包含了Dapper.Contrib的所有实体配置选项

  • Table:指定实体对应地数据库表名,可忽略,但是忽略后实体对应地数据库表名会在末尾加个s,Demo对应Demos(感觉画蛇添足了)
  • Key:指定此列为主键(自动增长主键),可忽略,忽略后默认查找
  • ExplicitKey:指定此列为主键(不自动增长类型例如guid,ExplicitKey与Key地区别下面会详细讲)
  • Computed:计算属性,打上此标签,对象地insert,update等操作会忽略此列
  • Write:需穿一个bool值,false时insert,update等操作会忽略此列(和Computed的作用差不多,看了源码也没发现与Computed有什么不一样的地方,有了解的朋友可以赐教下哈)

Key和ExplicitKey这两项都是指定列为主键的。区别是打上Key特性的列在插入时是不能指定值的,只能是数据库自动增长列,而ExplicitKey特性可以允许在插入时指定值,比如用guid为主键类型,则主键在插入时必须已经生成好。

增删改查

做好上面的配置后就可以进行实体的操作了,Dapper.Contrib与Dapper一样都是拓展了DbConnection对象,方法如下(未列出异步方法)

  • T Get<T>(id);
  • IEnumerable<T> GetAll<T>();
  • int Insert<T>(T obj);
  • int Insert<T>(Enumerable<T> list);
  • bool Update<T>(T obj);
  • bool Update<T>(Enumerable<T> list);
  • bool Delete<T>(T obj);
  • bool Delete<T>(Enumerable<T> list);
  • bool DeleteAll<T>();

值得注意的是,从源码得知,Get方法仅支持单主键查询,如果多主键或者没主键都会报错

代码语言:javascript
复制
 if (keyCount > 1)
                throw new DataException($"{method}<T> only supports an entity with a single [Key] or [ExplicitKey] property");
 if (keyCount == 0)
                throw new DataException($"{method}<T> only supports an entity with a [Key] or an [ExplicitKey] property");
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 为什么使用Dapper.Contrib
  •  使用Dapper.Contrib
    • entity配置
      • 增删改查
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档