Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。给出官方地址。

http://code.google.com/p/dapper-dot-net/

个人觉得他非常好用,现在已经取代了原来的SqlHelper。优点:

  1. 使用Dapper可以自动进行对象映射!
  2. 轻量级,单文件。
  3. 支持多数据库。
  4. Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。

网上还有对Dapper的扩展类,这里就不赘述了。下面只讲下简单的增删改查、数据库表间的对应关系和事务的应用。

先给出实体类的关系:

书和书评是1---n的关系。(沿用Entity Framework的实体类,virtual表示延迟加载,此处忽略)

//书
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);}}

  • 基本的增删改查操作

  由于Dapper ORM的操作实际上是对IDbConnection类的扩展,所有的方法都是该类的扩展方法。所以在使用前先实例化一个IDBConnection对象。

IDbConnection conn = new SqlConnection(connString);

Insert

 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#本质论"});

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

 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();     

  • 数据库表对应关系操作
//查询图书时,同时查找对应的书评,并存在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;

//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;
}

  • 事务操作
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);}
}

后续文章

  1. 《利用Dapper ORM搭建三层架构》
  2. 《Stackoverflow/dapper的Dapper-Extensions用法(一)》

由于自己的毕设也是用它来写的,所以放出来,可以作为一个实例来参考一下。

sql server2012 + dapper + asp.net mvc4 + easyUI的药库管理系统,有兴趣的可以star一下哦~

转载于:https://www.cnblogs.com/webenh/p/7837777.html

Dapper的基本使用相关推荐

  1. .net平台性能很不错的轻型ORM类Dapper(转)

    .net平台性能很不错的轻型ORM类Dapper Posted By : 蓝狐 Updated On : 2016-04-22 23:16 dapper只有一个代码文件,完全开源,你可以放在项目里的任 ...

  2. OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现

    最近趁着不忙,在构思一个搭建一个开源的完整项目,至于原因以及整个项目框架后边文章我再说明.既然要起一个完整的项目,那么数据仓储访问就必不可少,这篇文章我主要介绍这个新项目(OSS.Core)中我对仓储 ...

  3. .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现...

    本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要 ...

  4. 轻量级ORM框架Dapper应用三:使用Dapper实现In操作

    IN 操作符允许我们在 WHERE 子句中规定多个值. 本篇文章中,还是使用和上篇文章中同样的实体类和数据库,Dapper使用in操作符的代码如下: 1 using System; 2 using S ...

  5. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...

  6. 以Dapper、Zipkin和LightStep [x]PM为例阐述分布式跟踪的过去、现在和未来

    \ 核心要点 \\ 在观测分布式系统和微服务时,分布式跟踪已经成为一个越来越重要的组件.现在有一些流行的开源标准和框架,比如OpenTracing API和OpenZipkin:\\t 分布式跟踪的基 ...

  7. 给力分享新的ORM = Dapper( 转)

    出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html 最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的. ...

  8. 1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)...

    1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主 ...

  9. .NET Core 使用Dapper 操作MySQL

    MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...

  10. dapper 注意事项之GUID

    今天把ef框架换成了dapper,数据库使用的是mysql. 主键使用GUID,mysql数据库中设置的为varchar(36). 使用dapper报错,不能将string转换为GUID,后来调试比对 ...

最新文章

  1. Visual Studio 2010构建Web浏“.NET研究”览器应用程序
  2. appium获取元素节点的方法_Appium学废系列(四) 如何写出优雅又健壮的脚本
  3. ue4 开发动作游戏_两年时间独自用UE4制作的动作游戏,传说一般的制作人离忧先生...
  4. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...
  5. BZOJ2115:[WC2011] Xor(线性基)
  6. mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python
  7. java游戏西门大官人_valueOf()方法的使用
  8. 【Python爬虫】网络爬虫的“盗亦有道”
  9. 记录Access数据库更新操作大坑一个
  10. List集合之CopyOnWriteArrayList
  11. Unity的URP项目开启
  12. cf. Is your horseshoe on the other hoof?
  13. March 7th Wednesday (三月 七日 水曜日)
  14. 2021年浙江省跨境电商行业发展概况及发展趋势分析[图]
  15. TCP BBR之Startup gain的另一种推导法以及最新进展
  16. 3个妙招,克服面试焦虑,紧张
  17. 【Go】Go 语言切片(Slice)
  18. 如何通过WWW下载图片 学习笔记
  19. Bookmarklet - 小书签,实用浏览器小工具
  20. python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?

热门文章

  1. linux配置定时删除日志文件,Linux使用shell脚本定时删除历史日志文件
  2. java io加速器,Java 日期操作
  3. 求1~n这n个整数十进制表示中1出现的次数
  4. 栈/队列 互相模拟实现
  5. C++学习笔记 简单部分
  6. web3@0.20.1 在依据abi创建智能合约的时候报错 TypeError: web3.eth.contract is not a function
  7. codeforces 281A-C语言解题报告
  8. 科目三大路考8个驾驶技巧
  9. FFMpeg在Windows环境下的编译
  10. 解决:Error response from daemon: Cannot restart container xxx: driver failed programming external