Dapper是介于Entity framework与ADO的折中选择。既满足手写查询的高性能需求,又简化了数据库对象映射为内存对象的繁杂工作。Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化。
如果仅仅使用Dapper,要对一个对象进行insert操作需要如下操作
using (var connection = new SqlConnection("链接字符串")) { var users = connection.Execute("insert into Demo (Name,Age) values(‘张三‘,23)"); }
Dapper.Contrib不需要写sql,操作对象即可
using (var connnection = DbHelper.GetConnection()) { var result = connnection.Insert(new Demo { Age = 23, Name = "张三", }); }
工欲善其事,必先利其器。要想不写sql愉快地增删改当然需要前期地配置。
[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的所有实体配置选项
Key和ExplicitKey这两项都是指定列为主键的。区别是打上Key特性的列在插入时是不能指定值的,只能是数据库自动增长列,而ExplicitKey特性可以允许在插入时指定值,比如用guid为主键类型,则主键在插入时必须已经生成好。
做好上面的配置后就可以进行实体的操作了,Dapper.Contrib与Dapper一样都是拓展了DbConnection对象,方法如下(未列出异步方法)
值得注意的是,从源码得知,Get方法仅支持单主键查询,如果多主键或者没主键都会报错
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");
原文:https://www.cnblogs.com/zl181015/p/12786049.html