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

文章来源 https://www.cnblogs.com/Sinte-Beuve/p/4231053.html

转载于:https://www.cnblogs.com/kerwincui/p/9328128.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. Jenkins+docker+maven+git自动化构建与部署
  2. Ubuntu 9.0 下之HBase 0.90.4 的安装和使用
  3. ❗HTML引入JavaScript的三种常用方式汇总❗
  4. poj 3321 Apple Tree(dfs序+树状数组求和模型)
  5. python def return 文件_python基础-文件处理与函数
  6. 图论 —— 图的搜索
  7. 一篇让你看懂卷积神经网络
  8. 仅展示近三天的动态设置_微信朋友圈好友设置仅展示最近3天动态是对所有好友吗?还是针对某个人...
  9. 显性测试数据全对的WA之uva355(已AC)
  10. springboot整合微信支付
  11. ArcGISPro制作辐射4风格地图
  12. Python报错ModuleNotFoundError: No module named ‘pyqtgraph‘
  13. Python——os库和shutil库的使用介绍
  14. 坯子库曲面推拉教程_坯子助手下载_坯子助手最新版下载-下载之家
  15. 云展网 课件 图片 下载
  16. 小身材也有强劲性能,树莓派2代B型图形界面搞机
  17. 数据分析/运营——重要业务指标小结
  18. Eclipse日志文件存放在何处
  19. PTA 求两点之间距离 (20 分)
  20. 实例021:猴子偷桃 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上

热门文章

  1. 【资源汇总分享】Android开发资源汇总之一
  2. 设计模式中的开闭原则
  3. POJ-1840 Eqs Hash
  4. 为什么要使用EJB?
  5. 虚拟机及VmBasic编译引擎实现
  6. FATFS文件系统框架及源码分析
  7. typedef的用法总结
  8. 常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先
  9. python四十六:继承顺序之线性顺序列表
  10. python四:字符串和数字