.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框架使用说明相关推荐

  1. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  2. .NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

  4. c# 轻量级ORM框架 实现(一)

    c# 轻量级ORM框架 实现(一) 2018年09月04日 14:11:02 IT哈 阅读数:1245 发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋 ...

  5. Python轻量级ORM框架——peewee

    这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...

  6. 重磅开源:基于.NET 6.0 自研轻量级ORM框架

    Fast Framework 项目:https://gitee.com/China-Mr-zhong/Fast.Framework 一.前言 1.为了实现快速开发,省去编写大量Sql时间,更好的面向对 ...

  7. DBScript:轻量级ORM

    DBScript:轻量级ORM DBScript是一个轻量级的ORM,支持数据库的以下操作:1.基本的增删改查 2. 数据库事务 3.数据库的读写分离.暂时支持的数据库有:MsSQL2005,MySQ ...

  8. java orm 工具_GitHub - donnie4w/jdao: jdao是一个java的轻量级orm工具包

    jdao是轻量级orm工具包,生成与数据表对应的dao类,持久层dao对象操作,同时也支持原生sql语句操作,支持多数据源,对象缓存等. v1.1.6 jdao 初始化: DaoFactory.set ...

  9. Jackson 框架使用说明,轻易转换JSON【转】

    Jackson 框架 使用说明 Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文: ...

最新文章

  1. Intellij IDEA 没办法创建java文件
  2. Centos之压缩和解压缩命令
  3. 用户 'IIS APPPOOL\DefaultAppPool'登录失败
  4. 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆
  5. silverligh的数据访问
  6. 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)
  7. mysql6位数货币大写,生成数字+英文字母大小写彩虹字符集(6位),共有62^6种可能_MySQL...
  8. 创建初始脚本工具mkscript.sh
  9. Java知识导航总图
  10. c++中goto语句用法
  11. Coded UI Test(二)创建一个Coded UI Test
  12. 大型计算机 内存,PC 新时代!DDR5 内存规范正式发布:最高速度达 6.4Gbps,单芯片密度达 64Gbit...
  13. web平台微信扫码登录
  14. 数据可视化~matplotlib显示多个子图
  15. 无法和 SFTP 服务器建立 FTP 连接,请选择合适的协议。
  16. WinRAR破解注册方法
  17. Java悲观锁Pessimistic-Lock常用实现场景
  18. matlab 用m_map画地形水深图
  19. 教你文件批量重命名技巧,彻底告别手工改名的繁琐
  20. Python下载酷狗音乐歌曲

热门文章

  1. Android ListView分页,动态添加数据
  2. treeview右键添加新节点
  3. Android----Fragments详解
  4. Hibernate中对增删改查的小结
  5. DevIL真是好用得想哭
  6. react --- Hook的使用
  7. Python数据分析之pandas入门
  8. Python中yield
  9. django 1.8 官方文档翻译: 3-4-2 内建显示视图
  10. 虚拟机安装与概述(3)