.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 [email protected]", 123));

注意:当运行SingleOrDefault返回超过1条记录会报错

分页查询

注意:所有大数据量查询请都使用这个分页的方法,PetaPoco的分页查询是数据库分页.

var result=db.Page<article>(1, 20, // <-- page number and items per page
"SELECT * FROM articles WHERE [email protected] 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 [email protected]", 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 [email protected]", 123);

// Update an article
db.Update<article>("SET [email protected] WHERE [email protected]", "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 [email protected]", id);

if (start_date.HasValue)
    sql.Append("AND date_created>[email protected]", start_date.Value);

if (end_date.HasValue)
    sql.Append("AND date_created<[email protected]", end_date.Value);

var a=db.Query<article>(sql);

也可以使用名字命名:

sql.Append("AND date_created>[email protected] AND date_created<[email protected]",
    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");
时间: 2024-08-23 17:23:52

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

轻量级ORM——PetaPoco

近乎产品的数据访问是基于轻量级ORM--PetaPoco,哪怕是最新的5.2版本也是基于PetaPoco. 产品源码下载地址:http://www.jinhusns.com/Products/Download 数据访问基于PetaPoco(轻量级ORM),采用Repository模式实现.具有以下功能特征: 在确保性能和灵活性的同时,最大限度减少数据访问的代码量,以提升开发效率: 目前支持SQL Server2005-20 08R2.SQL Server Express2005~2008R2,S

Android 轻量级ORM数据库开源框架ActiveAndroid 源码分析

ActiveAndroid 项目地址在https://github.com/pardom/ActiveAndroid 关于他的详细介绍和使用步骤 可以看下面两篇文章: https://github.com/pardom/ActiveAndroid/wiki http://www.future-processing.pl/blog/persist-your-data-activeandroid-and-parse/ 请确保你在阅读本文下面的内容之前 熟读上面的2篇文章.我不会再讲一遍如何使用这个框

轻量级ORM框架初探-Dapper与PetaPoco的基本使用

一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库表 (1)For MSSQL CREATE TABLE [dbo].[Posts] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CategoryId] INT NOT NULL, [Slug] VARCHAR(120) NOT NULL, [Title] N

分享自己写的基于Dapper的轻量级ORM框架~

1.说明 本项目是一个使用.NET Standard 2.0开发的,基于 Dapper 的轻量级 ORM 框架,包含基本的CRUD以及根据表达式进行一些操作的方法,目前只针对单表,不包含多表连接操作. github:https://github.com/iamoldli/NetSql 2.使用方法 2.2.安装 Install-Package NetSql 2.2.创建实体 创建Article实体类,继承EntityBase public class Article : EntityBase {

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

发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋友会很好理解. 设计该框架的目的:不想重复的写增删改查,把精力放到功能实现上. 发布改框架的原因:希望给初学者一个参考,希望能给予好的建议,给自己一个展示机会. 在我开始之前,先说明一下,我对"软件工程学"概念东西几乎不通,最高文化程度:初二,所以不喜勿喷. 开始我的orm设计最底层 最底层的是一个DalBase,它是一个抽象的,实现了增删改查的基本操作. 它既然是一个抽象的,那么它的内部就

c# 轻量级 ORM 框架 之 DBHelper 实现 (三)

周末了比较清闲,把自己的orm框架整理了下,开源了. 已经做出来的东西通常感觉有些简单,一些新手或许听到"框架"一类的词觉得有些"高深",简单来说orm就是把ado的封装. 在介绍这个框架的第一篇博文,已经把DalBase介绍了一下设计思路,本篇的DBHelper对象也是给dalBase来用的,可以说框架的所有定义对象都是为了它. 这里起名叫DBHelper,因为我也是从写SQLHelper开始的,DBHelper只不过是所有类型对ado操作的各种方法的封装,所以本

.NET轻量级ORM框架Dapper修炼手册

一.摘要 1.1.为什么叫本次的分享课叫<修炼手册>? 阿笨希望本次的分享课中涉及覆盖的一些小技巧.小技能给您带来一些帮助.希望您在日后工作中把它作为一本实际技能手册进行储备,以备不时之需,一旦当手头遇到与Dapper修炼手册中相似用法的地方和场景,可以直接拿来进行翻阅并灵活的运用到项目中.最后阿笨建议您可以根据自己在工作中碰到的不同的使用场景,不断的完善此本修炼手册. 废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工. 四.涉及覆盖的知识点 1.C# Linq To Xml技术.

Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 前言 上文讲述了数据库配置使用,搭建好数据库的链接方式了我们知道怎么做了. 事实上,至今我们仍然还没有讲到代码方面,花了前面这么多篇幅讲解,主要是想由浅入深,不然一上来给大家讲解这讲解那的,听的也一头雾水,反而得不到效果. 这篇比较重要,因为它是我们在使用Far

c# 轻量级ORM框架 之 WhereHelper (二)

上篇文章发布了一些设计orm框架基层的和实现,有朋友提出WhereHelper是亮点,能被认可我表示高兴. 我就把WhereHelper设计思想和代码公开下. WhereHelper 的概念就是再拼接where 条件,为了能兼容各种数据库和参数化查询,故封装了该对象. 首先根据我的框架结构: 1.Common库 这里主要定义了,所有层都访问的类型及常用方法,因为是介绍WhereHelper的实现,对其它就不做详细解释了. WhereHelper定义到这一层是想着UI会用到该查询,故把该类型的定义