Dapper笔记-Dapper.Contrib
简介:
Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化。
如果只使用Dapper,增删改操作都需要手写sql,然后使用Execute()执行。Dapper.Contrib不需要写sql,操作对象即可
entity配置:
[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>();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构