Dapper的基本使用
Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。给出官方地址。
http://code.google.com/p/dapper-dot-net/
个人觉得他非常好用,现在已经取代了原来的SqlHelper。优点:
- 使用Dapper可以自动进行对象映射!
- 轻量级,单文件。
- 支持多数据库。
- Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。
网上还有对Dapper的扩展类,这里就不赘述了。下面只讲下简单的增删改查、数据库表间的对应关系和事务的应用。
先给出实体类的关系:
书和书评是1---n的关系。(沿用Entity Framework的实体类,virtual表示延迟加载,此处忽略)
![](/assets/blank.gif)
//书 public class Book{public Book(){Reviews = new List<BookReview>();}public int Id { get; set; }public string Name { get; set; }public virtual List<BookReview> Reviews { get; set; }public override string ToString(){return string.Format("[{0}]------《{1}》", Id, Name);}}//书评public class BookReview{public int Id { get; set; }public int BookId { get; set; }public virtual string Content { get; set; }public virtual Book AssoicationWithBook { get; set; }public override string ToString(){return string.Format("{0})--[{1}]\t\"{3}\"", Id, BookId, Content);}}
![](/assets/blank.gif)
- 基本的增删改查操作
由于Dapper ORM的操作实际上是对IDbConnection类的扩展,所有的方法都是该类的扩展方法。所以在使用前先实例化一个IDBConnection对象。
IDbConnection conn = new SqlConnection(connString);
Insert
![](/assets/blank.gif)
Book book = new Book();book.Name="C#本质论";string query = "INSERT INTO Book(Name)VALUES(@name)"; //对对象进行操作conn.Execute(query, book); //直接赋值操作conn.Execute(query, new {name = "C#本质论"});
![](/assets/blank.gif)
update
string query = "UPDATE Book SET Name=@name WHERE id =@id";conn.Execute(query, book);
delete
string query = "DELETE FROM Book WHERE id = @id"; conn.Execute(query, book); conn.Execute(query, new { id = id });
query
![](/assets/blank.gif)
string query = "SELECT * FROM Book"; //无参数查询,返回列表,带参数查询和之前的参数赋值法相同。conn.Query<Book>(query).ToList();//返回单条信息string query = "SELECT * FROM Book WHERE id = @id";book = conn.Query<Book>(query, new { id = id }).SingleOrDefault();
![](/assets/blank.gif)
- 数据库表对应关系操作
![](/assets/blank.gif)
//查询图书时,同时查找对应的书评,并存在List中。实现1--n的查询操作 string query = "SELECT * FROM Book b LEFT JOIN BookReview br ON br.BookId = b.Id WHERE b.id = @id"; Book lookup = null; //Query<TFirst, TSecond, TReturn>var b = conn.Query<Book, BookReview, Book>(query,(book, bookReview) =>{//扫描第一条记录,判断非空和非重复if (lookup == null || lookup.Id != book.Id)lookup = book;//书对应的书评非空,加入当前书的书评List中,最后把重复的书去掉。if (bookReview != null)lookup.Reviews.Add(bookReview);return lookup;}, new { id = id }).Distinct().SingleOrDefault(); return b;
![](/assets/blank.gif)
![](/assets/blank.gif)
//1--1操作 BookReview br; string query = "SELECT * FROM BookReview WHERE id = @id"; using (conn) {br = conn.Query<BookReview, Book, BookReview>(query,(bookReview, book) =>{bookReview.AssoicationWithBook = book;return bookReview;}, new { id = id }).SingleOrDefault();return br; }
![](/assets/blank.gif)
- 事务操作
![](/assets/blank.gif)
using (conn) { //开始事务 IDbTransaction transaction = conn.BeginTransaction();try{string query = "DELETE FROM Book WHERE id = @id";string query2 = "DELETE FROM BookReview WHERE BookId = @BookId";conn.Execute(query2, new { BookId = id }, transaction, null, null);conn.Execute(query, new { id = id }, transaction, null, null);//提交事务transaction.Commit();}catch (Exception ex){//出现异常,事务Rollbacktransaction.Rollback();throw new Exception(ex.Message);} }
![](/assets/blank.gif)
后续文章
- 《利用Dapper ORM搭建三层架构》
- 《Stackoverflow/dapper的Dapper-Extensions用法(一)》
由于自己的毕设也是用它来写的,所以放出来,可以作为一个实例来参考一下。
sql server2012 + dapper + asp.net mvc4 + easyUI的药库管理系统,有兴趣的可以star一下哦~
转载于:https://www.cnblogs.com/webenh/p/7837777.html
Dapper的基本使用相关推荐
- .net平台性能很不错的轻型ORM类Dapper(转)
.net平台性能很不错的轻型ORM类Dapper Posted By : 蓝狐 Updated On : 2016-04-22 23:16 dapper只有一个代码文件,完全开源,你可以放在项目里的任 ...
- OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现
最近趁着不忙,在构思一个搭建一个开源的完整项目,至于原因以及整个项目框架后边文章我再说明.既然要起一个完整的项目,那么数据仓储访问就必不可少,这篇文章我主要介绍这个新项目(OSS.Core)中我对仓储 ...
- .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现...
本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要 ...
- 轻量级ORM框架Dapper应用三:使用Dapper实现In操作
IN 操作符允许我们在 WHERE 子句中规定多个值. 本篇文章中,还是使用和上篇文章中同样的实体类和数据库,Dapper使用in操作符的代码如下: 1 using System; 2 using S ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...
- 以Dapper、Zipkin和LightStep [x]PM为例阐述分布式跟踪的过去、现在和未来
\ 核心要点 \\ 在观测分布式系统和微服务时,分布式跟踪已经成为一个越来越重要的组件.现在有一些流行的开源标准和框架,比如OpenTracing API和OpenZipkin:\\t 分布式跟踪的基 ...
- 给力分享新的ORM = Dapper( 转)
出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html 最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的. ...
- 1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)...
1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主 ...
- .NET Core 使用Dapper 操作MySQL
MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...
- dapper 注意事项之GUID
今天把ef框架换成了dapper,数据库使用的是mysql. 主键使用GUID,mysql数据库中设置的为varchar(36). 使用dapper报错,不能将string转换为GUID,后来调试比对 ...
最新文章
- Visual Studio 2010构建Web浏“.NET研究”览器应用程序
- appium获取元素节点的方法_Appium学废系列(四) 如何写出优雅又健壮的脚本
- ue4 开发动作游戏_两年时间独自用UE4制作的动作游戏,传说一般的制作人离忧先生...
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...
- BZOJ2115:[WC2011] Xor(线性基)
- mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python
- java游戏西门大官人_valueOf()方法的使用
- 【Python爬虫】网络爬虫的“盗亦有道”
- 记录Access数据库更新操作大坑一个
- List集合之CopyOnWriteArrayList
- Unity的URP项目开启
- cf. Is your horseshoe on the other hoof?
- March 7th Wednesday (三月 七日 水曜日)
- 2021年浙江省跨境电商行业发展概况及发展趋势分析[图]
- TCP BBR之Startup gain的另一种推导法以及最新进展
- 3个妙招,克服面试焦虑,紧张
- 【Go】Go 语言切片(Slice)
- 如何通过WWW下载图片 学习笔记
- Bookmarklet - 小书签,实用浏览器小工具
- python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?
热门文章
- linux配置定时删除日志文件,Linux使用shell脚本定时删除历史日志文件
- java io加速器,Java 日期操作
- 求1~n这n个整数十进制表示中1出现的次数
- 栈/队列 互相模拟实现
- C++学习笔记 简单部分
- web3@0.20.1 在依据abi创建智能合约的时候报错 TypeError: web3.eth.contract is not a function
- codeforces 281A-C语言解题报告
- 科目三大路考8个驾驶技巧
- FFMpeg在Windows环境下的编译
- 解决:Error response from daemon: Cannot restart container xxx: driver failed programming external