Dapper.Contrib——更加优雅地使用Dapper进行增删改查
简介
Dapper是介于Entity framework与ADO的折中选择。既满足手写查询的高性能需求,又简化了数据库对象映射为内存对象的繁杂工作。Dapper.Contrib是对Dapper的进一步封装,使对象的基本增删改查等操作进一步简化。
为什么使用Dapper.Contrib
如果仅仅使用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 = ,
Name = "张三",
});
}
使用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 * ; [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方法仅支持单主键查询,如果多主键或者没主键都会报错
if (keyCount > )
throw new DataException($"{method}<T> only supports an entity with a single [Key] or [ExplicitKey] property");
if (keyCount == )
throw new DataException($"{method}<T> only supports an entity with a [Key] or an [ExplicitKey] property");
Dapper.Contrib——更加优雅地使用Dapper进行增删改查的更多相关文章
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- 使用轻量级ORM Dapper进行增删改查
项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET.微软的EF.NH等.再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司 ...
- 在C#的控制台应用中使用Dapper链接MySQL并执行一些增删改查
一.首先先创建一个C#的控制台应用 二.然后添加上必要的命名空间 using System;using System.Collections.Generic;using MySql.Data.MySq ...
- Dapper进行增删改查 z
http://www.cnblogs.com/huangkaiyan10/p/4640548.html 项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET ...
- Dapper 增删改查
0.数据库及实体类 create table Users ( Id ,) primary key, Name nvarchar() not null, Password nvarchar() not ...
- C# Dapper 基本使用 增删改查事务等
using DapperTest.Models; using System.Collections.Generic; using System.Web.Http; using Dapper; usin ...
- C# 使用 Dapper 实现 SQLite 增删改查
Dapper 是一款非常不错的轻型 ORM 框架,使用起来非常方便,经常使用 EF 框架的人几乎感觉不到差别,下面是自己写的 Sqlite 通用帮助类: 数据连接类: public class SQL ...
- C# Dapper 基本使用 增删改查事务
来源:https://blog.csdn.net/Tomato2313/article/details/78880969 using DapperTest.Models; using System.C ...
- Dapper基本增删改查
说明: 1.在using语句块中不用dbConnection.Open(),因为Execute方法中会Open,并且在执行完成会Close. 2.在Ado.Net中要手动Open,在Using语句块中 ...
随机推荐
- php字符的替换,截取,指定查找
<?php/** * Created by 郭鹏. * User: msi * Date: 2017/9/27 * Time: 14:17 *///随机数生成器echo rand();echo ...
- React——高阶组件
1.在React中higher-order component (HOC)是一种重用组件逻辑的高级技术.HOC不是React API中的一部分.HOC是一个函数,该函数接收一个组件并且返回一个新组件. ...
- Nginx学习——Nginx简单介绍和Linux环境下的安装
一:Nginx的简介 百科百科:Nginx Nginx 是一个俄罗斯的哥们开发的,并将其进行了开源. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, ...
- C "right-left" 从左到右
葵花宝典:http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html C混带代码大赛
- Hive任务优化(2)
JOIN优化 1.大多数情况下,Hive会对每对Join连接对象启动一个MapReduce任务. 2.多表关联时,如果每个ON子句都使用相同的连接键的话,那么只会产生一个MapReduce Job. ...
- HDFS源码分析之NameNode(3)————RpcServer
NameNodeRpcServer implements NamenodeProtocols NameNode支持核心即NameNodeRpcServer 实现ClientProtocol 支持客户 ...
- 用ESP8266+android,制作自己的WIFI小车
整体思路ESP8266作为TCP服务器,,手机作为TCP客户端,自己使用Lua直接做到了芯片里面,省了单片机,,节约成本,其实本来就是个单片机(感觉Lua开发8266真的很好,甩AT指令好几条街,,而 ...
- windows phone 模拟器
window phone 模拟器启动报错 修改Bios设置,我的是yoga pro 2,只修改 即可.启动成功
- 22.Linux-块设备驱动之框架详细分析(详解)
本节目的: 通过分析块设备驱动的框架,知道如何来写驱动 1.之前我们学的都是字符设备驱动,先来回忆一下 字符设备驱动: 当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符 ...
- Ubuntu16.04 install eclipse-jee-oxygen-R-linux-gtk-x86_64
下面如何在Ubuntu16.04 下面怎么下载Java EE并创建在桌面快捷上下载Java EE:eclipse下载Java EE官网:http://www.eclipse.org/downloads ...