博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dapper的基本使用
阅读量:6085 次
发布时间:2019-06-20

本文共 3274 字,大约阅读时间需要 10 分钟。

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

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

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

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

先给出实体类的关系:

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

 
//书public class Book    {        public Book()        {            Reviews = new List
(); } public int Id { get; set; } public string Name { get; set; } public virtual List
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
(query).ToList(); //返回单条信息 string query = "SELECT * FROM Book WHERE id = @id"; book = conn.Query
(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
var b = conn.Query
(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
(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)  {    //出现异常,事务Rollback    transaction.Rollback();    throw new Exception(ex.Message);  }}

转载于:https://www.cnblogs.com/teng-0802/p/9268302.html

你可能感兴趣的文章
精至手机药典iPhone版
查看>>
MFC CSplitterWnd的用法
查看>>
玩转Android TabWidget(切换卡)
查看>>
asp.net中使用一般处理程序生成验证码
查看>>
ASP.NET MVC 3.0小知识积累
查看>>
Windows Phone Dev Notes-如何使用ConnectionSettingsTask 来启动连接设置页面
查看>>
Cocos2d-x执行时错误:Cocos2d: Get data from file(xxx.xxx) failed!
查看>>
内容提供者 ContentResolver 数据库 示例 -1
查看>>
17秋 软件工程 第六次作业 Beta冲刺 Scrum2
查看>>
web.xml中的contextConfigLocation在spring中的作用
查看>>
ElasticSearch + Canal 开发千万级的实时搜索系统
查看>>
SharePoint Server 2019新特性
查看>>
PHP 开源软件《个人管理系统》——技术规范
查看>>
SQL Server DBA必须要做的五件事
查看>>
svn打标签
查看>>
拆穿安全Web浏览的十大谎言,互联网营销
查看>>
Visual Studio 2010 实用功能总结图解
查看>>
Boost.Python
查看>>
[转载]Windows平台编程之OnCreate函数的说明
查看>>
Linux内核多线程(四)
查看>>