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. HDU5071 - Chat(STL模拟)

    题目描述 略... 题解 现场赛的时候真是脑残...用splay去写..写完发现调试不出来...然后才发现数据范围才5000...不过那时候只有40分钟了..用数组模拟了速度敲了一发.写完只剩10几分 ...

  2. HTML5每日一练之input新增加的URL类型与email类型应用

    1.URL类型: <form> <input name="urls" type="url" value="http://www.w3 ...

  3. centos 使用mutt 命令发送邮件,随笔非教程

    #按照mutt yum -y install mutt #发送邮件 echo .com -s "邮件主题" -a 附件本地地址

  4. Spring InitializingBean and DisposableBean example

    In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to ...

  5. SaltStack安装(CentOS7.x)

    安装基础: 参考文档:https://docs.saltstack.com/en/latest/topics/installation/rhel.html 1.导入SaltStack仓库key: wg ...

  6. [iOS基础控件 - 6.9.2] 静态单元格 QQ功能列表

    使用storyboard设计静态的表格数据   A.实现步骤 1.控制器继承UITableViewController 2.在storyboard中使用TableViewController,删除原来 ...

  7. VS2015中DataGridView的DataGridViewComBoboxCell列值无效及数据绑定错误的解决方法

    在VS2015中练习DataGridView的使用, 发现其中的DataGridViewComBoboxCell列存在着绑定数据库列后出现值无效的提示 根据网上的解决办法,添加了DataError后可 ...

  8. Oracle-11g 从表空间删除数据文件

    从表空间删除数据文件前提条件 如果欲从表空间中删除数据文件,那么该数据文件必须为空,否则将报出"ORA-03262: the file is non-empty"的错误.   从表 ...

  9. UVa Online Judge 工具網站

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

  10. Spring-AOP和AspectJ的区别和联系

    AOP是Spring框架的重要组成部分.目前我所接触的AOP实现框架有Spring AOP还有就是AspectJ(还有另外几种我没有接触过).我们先来说说他们的区别: AspectJ是一个比较牛逼的A ...