日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

轻量级ORM框架 【Dapper】 的使用

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轻量级ORM框架 【Dapper】 的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ORM是什么?

從字面理解,O是Object,對(duì)象;R是Relation,關(guān)系;M是Mapping,映射。所以,用一句話概括就是:ORM是一種對(duì)象關(guān)系映射的技術(shù)

?

Dapper 是.NET下的一種ORM框架。

Dapper的安裝

使用NuGet安裝
打開visual studio的項(xiàng)目,依次點(diǎn)擊工具,NuGet包管理器,管理解決方案的NuGet程序包;再點(diǎn)擊瀏覽,搜索dapper,點(diǎn)擊搜索結(jié)果中的Dapper,勾選項(xiàng)目,選擇安裝;

在解決方案管理器中點(diǎn)擊項(xiàng)目,查看引用,如果有Dapper,說(shuō)明安裝成功。

?

Dapper的基本用法

首先,我們?cè)贛odel層寫一個(gè)Person類,他有ID,Name,Remark。

同樣我們?cè)跀?shù)據(jù)庫(kù)也有一個(gè)Person表,包含id,name,remark三個(gè)字段,其中id是主鍵自增。

而后我們?cè)贒AL層寫一個(gè)PersonDB類,提供對(duì)Person的基本訪問。connectionString是數(shù)據(jù)庫(kù)連接字符串,由配置文件讀取。

插入操作

將一個(gè)對(duì)象person插入數(shù)據(jù)庫(kù)。插入代碼文本如下。@Name的意思是自動(dòng)將person里的Name值綁定上去。

public static int Insert(Person person) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", person); } }

批量插入:

/// <summary> /// 批量插入Person數(shù)據(jù),返回影響行數(shù) /// </summary> /// <param name="persons"></param> /// <returns>影響行數(shù)</returns> public static int Insert(List<Person> persons) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", persons);} }

刪除操作:

public static int Delete(Person person) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("delete from Person where id=@ID", person);} }public static int Delete(List<Person> persons) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("delete from Person where id=@ID", persons);} }

修改操作:

public static int Update(Person person) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("update Person set name=@name where id=@ID", person);} }public static int Update(List<Person> persons) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Execute("update Person set name=@name where id=@ID", persons);} }

查詢操作:

/// <summary> /// 無(wú)參查詢所有數(shù)據(jù) /// </summary> /// <returns></returns> public static List<Person> Query() {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Query<Person>("select * from Person").ToList();} }/// <summary> /// 查詢指定數(shù)據(jù) /// </summary> /// <param name="person"></param> /// <returns></returns> public static Person Query(Person person) {using (IDbConnection connection = new SqlConnection(connectionString)){return connection.Query<Person>("select * from Person where id=@ID", person).SingleOrDefault();} }

?

Dapper的復(fù)雜操作

查詢的In操作:

/// <summary> /// In操作 /// </summary> public static List<Person> QueryIn() {using (IDbConnection connection = new SqlConnection(connectionString)){var sql = "select * from Person where id in @ids";//參數(shù)類型是Array的時(shí)候,dappper會(huì)自動(dòng)將其轉(zhuǎn)化return connection.Query<Person>(sql, new { ids = new int[2] { 1, 2 }, }).ToList();} }public static List<Person> QueryIn(int[] ids) {using (IDbConnection connection = new SqlConnection(connectionString)){var sql = "select * from Person where id in @ids";//參數(shù)類型是Array的時(shí)候,dappper會(huì)自動(dòng)將其轉(zhuǎn)化return connection.Query<Person>(sql, new { ids }).ToList();} }

多語(yǔ)句操作

為此我們引入以下Book類,同樣在數(shù)據(jù)庫(kù)里設(shè)置這個(gè)表。

public class Book {public int ID { get; set; }public int PersonID { get; set; }public string BookName { get; set; } } /// <summary> /// 多語(yǔ)句操作 /// </summary> public static void QueryMultiple() {using (IDbConnection connection = new SqlConnection(connectionString)){var sql = "select * from Person; select * from Book";var multiReader = connection.QueryMultiple(sql);var personList = multiReader.Read<Person>();var bookList = multiReader.Read<Book>();multiReader.Dispose();} }

Join操作

我們是面向?qū)ο缶幊?#xff0c;所以一個(gè)對(duì)象里面會(huì)有許多其他子對(duì)象,這個(gè)子對(duì)象里面又有其自己的子對(duì)象,這種關(guān)系在數(shù)據(jù)庫(kù)里的表示就是外鍵。
比如我們有一本書book,它有主人person,book是一個(gè)對(duì)象,主人又是一個(gè)對(duì)象。

public class BookWithPerson {public int ID { get; set; }public Person Pers { get; set; }public string BookName { get; set; } } 我們自然想要一個(gè)方法把數(shù)據(jù)庫(kù)里復(fù)雜的外鍵關(guān)系轉(zhuǎn)成我們需要的對(duì)象BookWithPerson,所有我們需要的信息都存在里面,取數(shù)據(jù)的時(shí)候只要找這個(gè)對(duì)象取數(shù)據(jù)就行了,比如我們需要一本書的主人的姓名,我們只需要bookWithPerson.Pers.Name。如果是一對(duì)多的關(guān)系我們用數(shù)組,如果是多對(duì)多我們加一層mapping。
現(xiàn)在我們想根據(jù)書的ID查詢書的信息,包括主人信息。 public static BookWithPerson QueryJoin(Book book) {using (IDbConnection connection = new SqlConnection(connectionString)){var sql = @"select b.id,b.bookName,p.id,p.name,p.remarkfrom Person as pjoin Book as bon p.id = b.personIdwhere b.id = @id;";var result = connection.Query<BookWithPerson, Person, BookWithPerson>(sql,(bookWithPerson, person) =>{bookWithPerson.Pers = person;return bookWithPerson;},book);//splitOn: "bookName");return (BookWithPerson)result;} } 其中,Query的三個(gè)泛型參數(shù)分別是委托回調(diào)類型1,委托回調(diào)類型2,返回類型。形參的三個(gè)參數(shù)分別是sql語(yǔ)句,map委托,對(duì)象參數(shù)。所以整句的意思是先根據(jù)sql語(yǔ)句查詢;同時(shí)把查詢的person信息賦值給bookWithPerson.Pers,并且返回bookWithPerson;book是對(duì)象參數(shù),提供參數(shù)綁定的值。
最終整個(gè)方法返回BookWithPerson,這樣我們所需要的所有信息就有了。



?*****************************
?*** Keep learning and growing. ***
?*****************************

轉(zhuǎn)載于:https://www.cnblogs.com/gangle/p/9287082.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的轻量级ORM框架 【Dapper】 的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。