1. Petapoco基本用法

1.1. 创建示例工程

首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件。命名为:PetapocoTest。

程序最终布局及功能预览如下:

1.2. 添加petapoco包

在项目文件的Reference上右键, 选择“管理NuGet程序包”,并搜索Petapoco,安装之。  

1.3. 添加数据库连接

在app.config或web.config文件中添加数据库连接串。  

下面是连接SQL Server:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=huhm\sqlexpress;Initial Catalog=Northwind;Persist Security Info=True;User ID=aspnet;Password=***;" providerName="System.Data.SqlClient" />
  </connectionStrings>
 

下面是连接MySQL:

 <add name="DefaultConnection" connectionString="Server=huhm;Port=3306;Database=Northwind;Uid=aspnet;Pwd=***;pooling=false;" providerName="MySql.Data.MySqlClient"/>

由于petapoco是与面向数据库无关的ORM组件,故对DB的增、删、改、查的代码与具体连接哪个物理数据库类型无关。

1.4. 定义POCO-实体类

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; }
}

1.5. 创建petapoco操作对象

接下来创建一个PetaPoco.Database对象。

var db=new PetaPoco.Database("DefaultConnection ");

1.6. 查询数据

// 查询所有数据
foreach (var a in db.Query<article>("SELECT * FROM articles"))
{
    Console.WriteLine("{0} - {1}", a.article_id, a.title);
}
//查询标量
long count=db.ExecuteScalar<long>("SELECT Count(*) FROM articles");

//查询单条数据
var a = db.SingleOrDefault<article>("SELECT * FROM articles WHERE article_id=@0", 123));
 

1.7. 分页查询

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");

返回的是一个PagedFetch对象,包括以下属性:

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; }
}

1.8. Query 与Fetch 方法

Petapoco支持2种查询数据的方法:Query及Fetch。Fetch返回的是List<T>数据对象,而Query使用了yield迭代器,返回IEnumerable,并且不是一次性全部将数据获取到内存。

1.9. 非查询命令

执行非查询语句,使用Execute 方法。

db.Execute("DELETE FROM articles WHERE draft<>0");

1.10. 增删改查

Petapoco很好地支持了增删改查。

插入一条记录,需要声明表名及主键:

// Create the article
var a=new article();
a.title="我的标题";
a.content="测试数据 by tinyhu";
a.date_created=DateTime.UtcNow;

// Insert it
db.Insert("articles", "article_id", a);

更新数据:

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

// Change it
a.content="测试数据 by tinyhu";

// Save it
db.Update("articles", "article_id", a);

可以传入一个匿名类型只更新部分部分字段。例如,下面只更新标题title列。

db.Update("articles", "article_id", new { title="New title" }, 123); 

删除有2种方法:

// Delete an article extracting the primary key from a record
db.Delete("articles", "article_id", a);

// Or if you already have the ID elsewhere
db.Delete("articles", "article_id", null, 123);

1.11. 声明POCO对象

上述例子中需要声明表名及主键来增删除改,简化起见,可以在poco对象添加TableName及PrimarKey属性,这样做CRUD操作时不再需要声明表名及主键了。

[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="测试标题";
a.content="测试数据 by tinyhu ";
a.date_created=DateTime.UtcNow;
db.Insert(a);

// Update it
a.content="修改,修改 …";
db.Update(a);

// Delete it
db.Delete(a);

可以声明一些字段忽略更新,如下例:

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

1.12. 自动Select子句

使用PetaPoco时,大多数查询以”select * from table”开始。可以省略掉SELECT * FROM table子句,因为petapoco会自动帮我们构建。

例如下句:

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

可简写为:

// Get a record
var a=db.SingleOrDefault<article>("WHERE article_id=@0", 123);

1.13. IsNew 及 Save 方法

1.14. 事务Transactions

1.15. PetaPoco的SQL Builder


原文引自:http://www.cnblogs.com/tinyhu/archive/2013/06/02/3113692.html

ORM之PetaPoco入门(二)--Petapoco基本用法的更多相关文章

  1. PetaPoco入门(二)

    1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...

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

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  3. PetaPoco入门

    (转自:http://www.cnblogs.com/tinyhu/archive/2013/06/02/3113652.html) 1. ORM概括 1.1. ORM简介 ORM 对象-关系映射(O ...

  4. UWP入门(十二)--数据绑定用法

    原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...

  5. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  6. Android高性能ORM数据库DBFlow入门

    DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...

  7. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  8. [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网 ...

  9. C#基础入门 二

    C#基础入门 二 循环语句 与C语言中用法相同. continue:结束本次循环(continue)后面的代码不再执行,进入下次循环(通常与if连用). 数组 一维数组定义:int[] intArra ...

随机推荐

  1. 《Java数据结构与算法》笔记-CH2无序数组

    /** * 本章目标: * 1.自制数组类 * 2.有序数组:按关键字升降序排列:二分法查找 * 3.分析有序数组.大O表示法 */ /** * 自制数组类 书中有的地方有错误,本程序以修改 */ c ...

  2. [转]虚方法(virtual)和抽象方法(abstract)的区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法pub ...

  3. j2ee的十三个规范

    转载 今天在做连接oracle数据库的时候,感受到了什么是规范.平时听到别人说学习j2ee一定要学习他的十三个规范,大概的知道每个规范是做什么的,每个“接口”是做什么的.          很早就听过 ...

  4. 解决oracle启动的错误: ORA-00119 ORA-00132

    $ sqlplus / as sysdbaSQL>create pfile fromspfile修改$ORACLE_HOME/dbs下的文件initDEV.ora中的*.local_listen ...

  5. c语言中register类型的变量

    C语言中: 一.register变量 关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中.有以下几点注意的地方. register变量必须是能被CPU寄存器所接受的类型,这通常意味着re ...

  6. flask前后台交互数据的几个思路

    通过url进行参数传递: @app.route('/hello/<name>') # <name>为传递的参数 def hello(name=None): return ren ...

  7. Angularjs 整体框架结构

    //angulajs整体代码框架结构/** * @license AngularJS v1.2.6 * (c) 2010-2014 Google, Inc. http://angularjs.org ...

  8. UVa Online Judge 工具網站

    UVa Online Judge 工具網站   UVa中译题uHuntAlgorithmist Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 Mirror UVa Online Judg ...

  9. 权限检查联系人ProfileProvider

    每日一贴,今天的内容关键字为权限检查 ProfileProvider继承自AbstractContyactsProvider. 源代码请自行下载     每日一道理 书籍好比一架梯子,它能引领人们登上 ...

  10. URAL 2046 A - The First Day at School 模拟题

    A - The First Day at SchoolTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...