翼度科技»论坛 云主机 LINUX 查看内容

Dapper.Contrib——更加优雅地使用Dapper进行增删改查

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
简介

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

如果仅仅使用Dapper,要对一个对象进行insert操作需要如下操作
  1. using (var connection = new SqlConnection("链接字符串"))
  2. {
  3.        var users = connection.Execute("insert into Demo (Name,Age) values('张三',23)");
  4. }
复制代码
Dapper.Contrib不需要写sql,操作对象即可
  1. using (var connnection = DbHelper.GetConnection())
  2. {
  3.       var result = connnection.Insert(new Demo
  4.        {
  5.             Age = 23,
  6.             Name = "张三",
  7.        });
  8. }
复制代码
 使用Dapper.Contrib

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

 
  1.     [Table("Demo")]
  2.     public class Demo
  3.     {
  4.         [Key] //不是自动增长主键时使用ExplicitKey
  5.         public int Id { get; set; }
  6.         public string Name { get; set; }
  7.         public int Age { get; set; }
  8.         [Computed]
  9.         public int ComputedAge => Age * 2;
  10.         [Write(false)]
  11.         public int NoWriteCol { get; set; }
  12.     }
复制代码
上面的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(id);
  • IEnumerable GetAll();
  • int Insert(T obj);
  • int Insert(Enumerable list);
  • bool Update(T obj);
  • bool Update(Enumerable list);
  • bool Delete(T obj);
  • bool Delete(Enumerable list);
  • bool DeleteAll();
值得注意的是,从源码得知,Get方法仅支持单主键查询,如果多主键或者没主键都会报错
  1. if (keyCount > 1)
  2.                 throw new DataException($"{method}<T> only supports an entity with a single [Key] or [ExplicitKey] property");
  3. if (keyCount == 0)
  4.                 throw new DataException($"{method}<T> only supports an entity with a [Key] or an [ExplicitKey] property");
复制代码
来源:https://www.cnblogs.com/51net/archive/2023/03/12/17208853.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具