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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net的轻量级ORM -- PetaPoco/NPOCO框架使用说明

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net的轻量级ORM -- PetaPoco/NPOCO框架使用说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.net的輕量級ORM -- PetaPoco/NPOCO框架使用說明
(具體參看:http://www.toptensoftware.com/petapoco/)

  從11年就開始嘗試使用輕量級ORM:PetaPoco,下文是基本使用方法。另外NPoco是PetaPoco的升級版,是另外一個人維護,原版PetaPoco基本不再維護。NPoco大多數用法和PetaPoco一致,另外有些額外的功能。NPoco我會考慮再寫一篇文章介紹。

  運行查詢

  首先定義POCO
  注:POCO意思是Plain Old CLR Object即指一般指帶有無參構造函數只有get set的簡單.net類:

// Represents a record in the "articles" table public class article {public long article_id { get; set; }public string title { get; set; }public DateTime date_created { get; set; }public bool draft { get; set; }public string content { get; set; } }

查詢

// Create a PetaPoco database object var db=new PetaPoco.Database("connectionStringName");// Show all articles foreach (var a in db.Query<article>("SELECT * FROM articles")) { Console.WriteLine("{0} - {1}", a.article_id, a.title); }

注意: Database有Fetch和Query兩個方法

Fetch返回List<T>.
而Query通過yield return 返回,使得不用遍歷記錄不用通過轉載整個數據到內存里面.

注意:少量數據用Fetch更方便,大量數據而且只是單向遍歷或者返回請用Query,以節約內存.

返回單個值

long count=db.ExecuteScalar<long>("SELECT Count(*) FROM articles");

返回單條記錄

var a = db.SingleOrDefault<article>("SELECT * FROM articles WHERE article_id=@0", 123));

注意:當運行SingleOrDefault返回超過1條記錄會報錯

分頁查詢

注意:所有大數據量查詢請都使用這個分頁的方法,PetaPoco的分頁查詢是數據庫分頁.

var result=db.Page<article>(1, 20, // <-- page number and items per page "SELECT * FROM articles WHERE category=@0 ORDER BY date_posted DESC", "coolstuff");

會返回

public class Page<T> where T:new() {public long CurrentPage { get; set; }public long ItemsPerPage { get; set; }public long TotalPages { get; set; }public long TotalItems { get; set; }public List<T> Items { get; set; } }

運行分頁方法,實際上PetaPoco會執行兩件事:

返回匹配的所有總記錄數.
得到需要的頁數的字記錄數.

注意:PetaPoco會把你的sql轉換成分頁sql,所以對sql有一定限制,請不要用select * 而且寫得sql嚴格用空格分開,避免PetaPoco不能正確地解析你的sql.

新增,更新,刪除記錄
新增

// Create the article var a=new article(); a.title="My new article"; a.content="PetaPoco was here"; a.date_created=DateTime.UtcNow;// Insert it db.Insert("articles", "article_id", a); // by now a.article_id will have the id of the new article

更新

// Get a record var a=db.SingleOrDefault<article>("SELECT * FROM articles WHERE article_id=@0", 123); // Change it a.content="PetaPoco was here again"; // Save it db.Update("articles", "article_id", a);可以用匿名對象更新,以下是僅更新title的例子 db.Update("articles", "article_id", new { title="New title" }, 123);

裝飾你的Poco

// Represents a record in the "articles" table [PetaPoco.TableName("articles")] [PetaPoco.PrimaryKey("article_id")] public class article { public long article_id { get; set; } public string title { get; set; } public DateTime date_created { get; set; } public bool draft { get; set; } public string content { get; set; } }

這樣就可以簡化操作

// Insert a record var a=new article(); a.title="My new article"; a.content="PetaPoco was here"; a.date_created=DateTime.UtcNow; db.Insert(a);// Update it a.content="Blah blah"; db.Update(a);// Delete it db.Delete(a);

當然也可以這樣運行

// Delete an article db.Delete<article>("WHERE article_id=@0", 123);// Update an article db.Update<article>("SET title=@0 WHERE article_id=@1", "New Title", 123);

也可以忽略某些屬性

public class article {[PetaPoco.Ignore]public long SomeCalculatedFieldPerhaps{ get; set; } }

使用事務

using (var trans =db.getTransaction()) {// Do transacted updates here// Commit trans.Complete(); }

SQL Builder

var id=123; var sql=PetaPoco.Sql.Builder.Append("SELECT * FROM articles").Append("WHERE article_id=@0", id);if (start_date.HasValue)sql.Append("AND date_created>=@0", start_date.Value);if (end_date.HasValue)sql.Append("AND date_created<=@0", end_date.Value);var a=db.Query<article>(sql);

也可以使用名字命名:

sql.Append("AND date_created>=@start AND date_created<=@end", new { start=DateTime.UtcNow.AddDays(-2), end=DateTime.UtcNow }; );

?

也可以這樣使用

var sql=PetaPoco.Sql.Builder().Select("*").From("articles").Where("date_created < @0", DateTime.UtcNow).OrderBy("date_created DESC");

?

sql使用where in 語法可以這樣

var tagsToFind = new string[] { "SqlServer", "IIS" }; var sql = PetaPoco.Sql.Builder.Select("*").From("Tags").Where("Name in (@tags)", new { tags = tagsToFind }); var result = db.Query<Tag>(sql);

生成的sql如下

select * from Tags where name in (@0, @1); @0 = SqlServer, @1 = IIS

?

?

?

轉載于:https://www.cnblogs.com/shiningplus/p/6848991.html

總結

以上是生活随笔為你收集整理的.net的轻量级ORM -- PetaPoco/NPOCO框架使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。