Dapper的基本使用

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

函數名作為參數傳遞

假如不知道signal的函數原型&#xff0c;考慮child_handler函數的參數從哪里來&#xff1f; void child_handler(int sig) { if (sig SIGINT) kill(pid_parent, SIGUSR1); } int main(void) { ...... signal(SIGINT, child_handler); ...... } 1、…

易語言神經網絡驗證碼識別_遞歸神經網絡 GRU+CTC+CNN 教會驗證碼識別

利用 NLP 技術做簡單數據可視化分析Chat 簡介&#xff1a;用遞歸神經網絡采用端到端識別圖片文字&#xff0c;遞歸神經網絡大家最早用 RNN &#xff0c;缺陷造成梯度消失問題&#xff1b;然后采用了 LSTM&#xff0c;解決 RNN 問題&#xff0c;并且大大提高準確率&#xff1b;現…

GCC 生成的符號表調試信息剖析

GCC把C語言源文件&#xff08;&#xff07;.c&#xff07;&#xff09;編譯成匯編語言文件&#xff08;&#xff07;.s&#xff07;&#xff09;&#xff0c;匯編器把匯編語言文件翻譯成目標文件&#xff08;&#xff07;.o&#xff07;&#xff09;&#xff0c;最后由鏈接器鏈…

《操作系統》OS學習(一):OS相關

清華大學操作系統OS&#xff08;向勇、陳渝&#xff09;視頻地址&#xff1a;http://www.xuetangx.com/courses/course-v1:TsinghuaX30240243Xsp/about 在ucore實驗中&#xff0c;一些基本的常用工具如下&#xff1a; 命令行shell: bash shell -- 有對文件和目錄操作的各種命令…

Android4.0藍牙使能的詳細解析

毫無疑問&#xff0c;bluetooth的打開是在Settings中進行的操作。因此&#xff0c;冤有頭&#xff0c;債有主&#xff0c;我們來到了Settings.java中&#xff0c;果然發現了相關的代碼如下&#xff1a; mBluetoothEnabler new BluetoothEnabler(context, new Switch(context));…

第一次沖刺

本人小組分工角色&#xff1a;產品負責人 本組沖刺訂單介紹&#xff1a;經過小組的成員討論&#xff0c;我們大概確立了一個沖刺的訂單是完成一個簡易的長沙學院網站項目。 最后完成情況概述&#xff1a;經過大約兩周的努力&#xff0c;我們組的編程人員運用python構建了一個簡…

移動端導出excel_連載系列【4】Excel開發移動端quot;APPquot;

前三篇文章介紹了百度地圖生成器、源代碼編輯器、GPS經緯度批量轉換工具、源代碼編輯器中添加自定義功能按鈕和地圖控件。這些寫好的Java Script代碼雖然可以實現所有期望的結果&#xff0c;但畢竟不是一個HTML文件&#xff0c;不便于傳播和使用&#xff0c;更無法變成一個類似…

《操作系統》OS學習(二):啟動、中斷、異常

Bootloader:加載OS。操作系統一開始是放在DISK&#xff08;硬盤&#xff09;中&#xff0c;并不是放在內存中。 BIOS&#xff1a;基本I/O處理系統。存放在ROMRead-Only Memory&#xff09;只讀存儲中 BIOS&#xff08;Basic Input/Output System&#xff09;基本輸入輸出系統。…

[GCC for C]編譯選項---IDE掩蓋下的天空

編譯選項 ---------IDE掩蓋下的天空 /*************************************** * gcc for c language ***************************************/ Single Source to Executable $ gcc helloworld.c [-o howdy] 默認生成的名字a.exe ______________________________________ …

2016級算法第二次上機-F.ModricWang's Number Theory II

891 ModricWangs Number Theory II 思路 使得序列的最大公約數不為1&#xff0c;就是大于等于2&#xff0c;就是找到一個大于等于2的數&#xff0c;它能夠整除序列中的所有數。 考慮使得一個數d整除數組中所有數的代價&#xff1a; 如果一個數不能被b整除&#xff0c;那么可以花…

常用css屬性集(持續更新…)

禁止換行&#xff0c;超出部分顯示…&#xff1a;a. 代碼&#xff1a;.hide_word{ max-width: 100px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } b. 效果&#xff1a; 本文轉自 bilinyee博客&#xff0c;原文鏈接&#xff1a; http://blog.51cto.co…

parallels網絡初始化失敗_33 個神經網絡「煉丹」技巧

自然語言處理Andrej Karpathy 是深度學習計算機視覺領域、與領域的研究員。博士期間師從李飛飛。在讀博期間&#xff0c;兩次在谷歌實習&#xff0c;研究在 Youtube 視頻上的大規模特征學習&#xff0c;2015 年在 DeepMind 實習&#xff0c;研究深度強化學習。畢業后&#xff0…

《操作系統》OS學習(三):系統調用

例子 首先看一個標準C庫的例子&#xff1a;當我們程序中使用了C庫中的printf()函數&#xff0c;實際在底層是在內核態中調用了write()函數。圖中右側則是將程序代碼與C庫都算到應用程序中&#xff0c;內核提供了一個系統調用接口。 從這個例子我們可以得到以下幾點&#xff1a…

cygwin/gcc與MinGW

cygwin/gcc和MinGW都是gcc在windows下的編譯環境&#xff0c;但是它們有什么區別?在實際工作中如何選擇這兩種編譯器呢?cygwin/gcc完全可以和在linux下的gcc劃等號&#xff0c;這個從boost庫的劃分中就可以看出來端倪&#xff0c;cygwin下的gcc和linux下的gcc使用的是相同的T…

JavaScript服務器端開發技術(對象屬性的枚舉與查詢)

既然對象是屬性的集合&#xff0c;那么檢測與枚舉集合中的屬性就是一項重要任務。對此&#xff0c;我們來分別看一下ES3和ES5提供的解決方案。 1) ES3枚舉方案 示例代碼&#xff1a; var contacts{ ID:[0,1,2,3,4,5], names:["Zero","One","Two&q…

treelistview 所有節點失去焦點_垃圾詢盤過濾,焦點科技的 Milvus 實踐

文章作者&#xff1a;黎陽&#xff0c;焦點科技軟件開發工程師李成龍&#xff0c;Zilliz 數據工程師Milvus (https://milvus.io/) 向量搜索引擎開源半年以來&#xff0c;全球已經有數百家企業或組織用戶。焦點科技是一家以 B2B 外貿交易為主營業務的科技公司&#xff0c;也是 M…

《操作系統》OS學習(四):計算機體系結構、內存層次和地址生成

計算機除了計算能力之外還有存儲能力&#xff0c;存儲能力即計算機擁有一系列的存儲介質&#xff0c;我們可以在存儲介質上存儲我們的代碼和數據。計算機體系結構中約定了哪些地方可以用來存儲數據&#xff1a;CPU內的寄存器、內存和外存。不同的存儲介質&#xff0c;容量、速度…

GCC中SIMD指令的應用方法

X86架構上的多媒體應用開發&#xff0c;如果能夠使用SIMD指令進行優化&#xff0c; 性能將大大提高。目前&#xff0c;IA-32的SIMD指令包括MMX&#xff0c;SSE&#xff0c;SSE2等幾級。 在GCC的開發環境中&#xff0c;有幾種使用SIMD指令的方式&#xff0c;本文逐一介紹。X86的…

使用angular4和asp.net core 2 web api做個練習項目(二), 這部分都是angular

上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from angular/core; import { Http, Headers } from angular/http; import { Observable } from rxjs/Observable; import { ErrorHandler } from angular/core; import rxj…

leelen可視對講怎么接線_樓宇對講系統怎么布線 樓宇對講系統布線方式【介紹】...

隨著智能小區規模不斷增加&#xff0c;樓宇可視對講系統應用越來越廣泛&#xff0c;因而視頻信號的傳輸方式與布線設計顯得越來越重要。視頻信號與數據和音頻信號不同&#xff0c;可行的一種傳輸方式為視頻信號基帶傳輸&#xff0c;下面小編就簡要介紹一下這種傳輸方式和布線方…