国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

開(kāi)源 PetaPoco 擴(kuò)展~一個(gè)小型輕巧的ORM~

2019-11-17 02:14:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

開(kāi)源 PetaPoco 擴(kuò)展~一個(gè)小型輕巧的ORM~

PetaPoco http://www.toptensoftware.com/petapoco/|PetaPoco is a tiny, fast, single-file micro-ORM for .NET and Mono.PetaPoco 是一個(gè)小型輕巧的 ORM~此擴(kuò)展是為 PetaPoco 添加 Linq 調(diào)用~用在自己寫(xiě)過(guò)的項(xiàng)目里~感覺(jué)很舒服很流暢~其實(shí)這個(gè)擴(kuò)展發(fā)在 Github 上也有一段時(shí)間了~就是一直介紹怎么用~也就基本沒(méi)人關(guān)注過(guò)~這幾天簡(jiǎn)單寫(xiě)了幾個(gè)簡(jiǎn)單例子~順便就也發(fā)到園子里了~開(kāi)源地址:https://github.com/NetRube/NetRube.Data

NetRube.Data PetaPoco 擴(kuò)展

PetaPoco extensions

基本用法請(qǐng)參照 http://www.toptensoftware.com/petapoco/

*需要調(diào)用 NetRube 基礎(chǔ)庫(kù) https://github.com/NetRube/NetRube

查詢

獲取記錄:

var a = db.Get<article>().FirstOrDefault();  // SELECT TOP(1) * FROM articlevar a2 = db.Get<article>().Where(e => e.article_id > 3 && e.title.Contains("NetRube")).FirstOrDefault();//var a3 = db.Get<article>().Where(e => e.article_id > 3).Where(e => e.title.Contains("NetRube")).FirstOrDefault();var a4 = db.Get<article>().Where(e => e.article_id > 3 || e.title.Contains("NetRube")).FirstOrDefault();//var a5 = db.Get<article>().Where(e => e.article_id > 3).WhereOr(e => e.title.Contains("NetRube")).FirstOrDefault();

Where 中 string 可以使用以下幾個(gè)方法:Contains("NetRube") --> LIKE '%NetRube%'StartsWith("NetRube") --> LIKE 'NetRube%'EndsWith("NetRube") --> LIKE '%NetRube'

獲取指定字段:

var a = db.Get<article>().Select(e => e.article_id, e => e.title).FirstOrDefault();// SELECT TOP(1) article_id, title FROM article

集合:

var ls = db.Get<article>().ToList();var ls2 = db.Get<article>().Where(e => e.article_id > 3 && e.title.Contains("NetRube")).ToList();

排序:

var ls = db.Get<article>().OrderByDescending(e => e.date_created).ToList();var ls2 = db.Get<article>().OrderByDescending(e => e.date_created, e => e.article_id).ToList();var ls3 = db.Get<article>().OrderByDescending(e => e.date_created).OrderBy(e => e.article_id).ToList();

指定范圍:

var ls = db.Get<article>().Take(10).Distinct().ToList();  // SELECT DISTINCT TOP(10) * FROM articlevar ls2 = db.Get<article>().Where(e => e.article_id > 3).Skip(5).Take(10).ToList();

分頁(yè)

var pageIndex = 1, pageSize = 20;var ls = db.Get<article>().Where(e => e.article_id > 3);ls.Where(e => e.title.StartsWith("NetRube"));ls.OrderByDescending(e => e.date_created);var result = ls.ToPagedList(pageIndex, pageSize);

聯(lián)合查詢:

var ls = db.Get<article>().LeftJoin<author>((e, o) => e.author_id == o.id).Where<author>(o => o.name == "NetRube").ToList();// 可以用 InnerJoin、LeftJoin、RightJoin

統(tǒng)計(jì):

long count = db.Get<article>().Count<long>();int count2 = db.Get<article>().Count();var count3 = db.Get<article>(e => e.article_id > 3).Count();var count4 = db.Get<article>().Where(e => e.article_id > 3).Count();long sum = db.Get<article>().Sum<long>(e => e.xx);int sum2 = db.Get<article>().Sum(e => e.xx);// Max()、Min() 用法一樣

Exist:

var e = db.Get<article>().Where(e => e.article_id == 3).Exist();

插入

var a = new article();a.title = "My new article";a.content = "PetaPoco was here";a.date_created = DateTime.UtcNow;bool s = db.Add<article>(a); // 是否插入成功long id = db.Add<long>(a);  // 返回插入成功后的 id 號(hào)

更新

var n = db.Set<article>().Set(e => e.title, "NetRube").Where(e => e.article_id == 1).Execute(); // 返回受影響記錄數(shù)// UPDATE article SET title = "NetRube" WHERE article_id = 1var s = db.Set<article>().Set(e => e.hits, e.hits + 1).Where(e => e.article_id == 1).Succeed(); // 是否更新成功// UPDATE article SET hits = hits + 1 WHERE article_id = 1

按需更新

var a = db.Get<article>().Where(e => e.article_id == 1).FirstOrDefault();var ss = NetRube.TrackingEntity<article>.Start(a); // 跟蹤實(shí)體變化a.title = "NetRube"; // 如果原實(shí)體 title 不等于 "NetRube" 將會(huì)更新此字段,如果跟原值一樣將不會(huì)更新,沒(méi)有重新賦值的字段也將不會(huì)更新db.Set<article>(ss).Where(e => e.article_id == 1).Execute();

刪除

var n = db.Del<article>().Where(e => e.article_id == 1).Execute(); // 返回受影響記錄數(shù)var s = db.Del<article>().Where(e => e.article_id == 1).Succeed(); // 是否刪除成功

事務(wù)

var s = db.InTransaction(() => {    db.Add...    db.Set...});var s2 = db.InTransaction(() => {    db.Add...    var s = db.Set...    if (s)    return true;return false;}); // 返回 false 時(shí)會(huì)導(dǎo)致整個(gè)嵌套的事務(wù)全部回滾

高級(jí)用法

一對(duì)多、多對(duì)一、多對(duì)多映射:Map() 映射方法參考:http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships

var authors = new Dictionary<long, author>();var posts = db.Get<post>().LeftJoin<author>((e, o) => e.author == o.id).Map<post, author>((p, a) =>{// Get existing author objectauthor aExisting;if (authors.TryGetValue(a.id, out aExisting))a = aExisting;elseauthors.Add(a.id, a);// Wire up objectsp.author_obj = a;return p;}).OrderBy(e => e.id).ToList();author current;var ls = db.Get<author>().LeftJoin<post>((a, p) => a.id == p.author).Map<author, post>((a, p) =>{if (a == null) return current;if (current != null && current.id == a.id){current.posts.Add(p);return null;}var PRev = current;current = a;current.posts = new List<post>();current.posts.Add(p);return prev;}).OrderBy(e => e.id).ToList();

In_查詢:

 var ids = new List<int>() { 1, 2, 3, 4 }; var ls = db.Get<author>().Where(e => e.id.In_(ids)).ToList(); var pids = db.Get<post>().Select(e => e.id).Where(e => e.id < 10); // 最后不要調(diào)用 ToList() var ls = db.Get<author>().Where(e => e.id.In_(pids)).ToList(); // In_() 里將調(diào)用 pids 生成的 SQL 語(yǔ)句

在上面所有的例子中 db.Get/Set/Add/Del 到最后的執(zhí)行方法(FirstOrDefault()、ToList()、Count()、Execute()等)之間的 Where、OrderBy、LeftJoin、Set、Select等等都可以以任意次序和次數(shù)調(diào)用,如:

var ls = db.Get<article>().OrderBy(e => e.date_created).Where(e => e.article_id > 3).Select(e => e.article_id).OrderByDescending(e => e.article_id).Where(e => e.title.Contains("NetRube")).Select(e => e.title).ToList(); // 最后調(diào)用執(zhí)行方法

整條語(yǔ)句也可以任意分成幾段,同理,只要在最后調(diào)用執(zhí)行方法就可以了:

var ls = db.Get<article>().OrderBy(e => e.date_created);ls.Where(e => e.article_id > 3).Select(e => e.article_id);var title = Request("title");if(!string.IsNullOrEmpty(title))ls.Where(e => e.title.Contains(title));ls.OrderByDescending(e => e.article_id).Select(e => e.title);var result = ls.ToList(); // 最后調(diào)用執(zhí)行方法

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富宁县| 阿拉善盟| 河池市| 晋州市| 武安市| 海淀区| 阳西县| 百色市| 福建省| 贵州省| 遵化市| 临沂市| 正安县| 高雄县| 宜君县| 阜平县| 萍乡市| 仙居县| 敖汉旗| 昌都县| 麻城市| 东安县| 浦城县| 武川县| 黄陵县| 疏附县| 绵阳市| 屏南县| 申扎县| 连云港市| 江陵县| 金昌市| 石楼县| 西丰县| 贵港市| 连州市| 晋中市| 乐至县| 金华市| 托里县| 东源县|