ORM之PetaPoco入门(二)--Petapoco基本用法
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基本用法的更多相关文章
- PetaPoco入门(二)
1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- PetaPoco入门
(转自:http://www.cnblogs.com/tinyhu/archive/2013/06/02/3113652.html) 1. ORM概括 1.1. ORM简介 ORM 对象-关系映射(O ...
- UWP入门(十二)--数据绑定用法
原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...
- php中的curl使用入门教程和常见用法实例
摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...
- Android高性能ORM数据库DBFlow入门
DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...
- C#基础入门 二
C#基础入门 二 循环语句 与C语言中用法相同. continue:结束本次循环(continue)后面的代码不再执行,进入下次循环(通常与if连用). 数组 一维数组定义:int[] intArra ...
随机推荐
- HDU5071 - Chat(STL模拟)
题目描述 略... 题解 现场赛的时候真是脑残...用splay去写..写完发现调试不出来...然后才发现数据范围才5000...不过那时候只有40分钟了..用数组模拟了速度敲了一发.写完只剩10几分 ...
- HTML5每日一练之input新增加的URL类型与email类型应用
1.URL类型: <form> <input name="urls" type="url" value="http://www.w3 ...
- centos 使用mutt 命令发送邮件,随笔非教程
#按照mutt yum -y install mutt #发送邮件 echo .com -s "邮件主题" -a 附件本地地址
- Spring InitializingBean and DisposableBean example
In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to ...
- SaltStack安装(CentOS7.x)
安装基础: 参考文档:https://docs.saltstack.com/en/latest/topics/installation/rhel.html 1.导入SaltStack仓库key: wg ...
- [iOS基础控件 - 6.9.2] 静态单元格 QQ功能列表
使用storyboard设计静态的表格数据 A.实现步骤 1.控制器继承UITableViewController 2.在storyboard中使用TableViewController,删除原来 ...
- VS2015中DataGridView的DataGridViewComBoboxCell列值无效及数据绑定错误的解决方法
在VS2015中练习DataGridView的使用, 发现其中的DataGridViewComBoboxCell列存在着绑定数据库列后出现值无效的提示 根据网上的解决办法,添加了DataError后可 ...
- Oracle-11g 从表空间删除数据文件
从表空间删除数据文件前提条件 如果欲从表空间中删除数据文件,那么该数据文件必须为空,否则将报出"ORA-03262: the file is non-empty"的错误. 从表 ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 UVa中译题uHuntAlgorithmist Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 Mirror UVa Online Judg ...
- Spring-AOP和AspectJ的区别和联系
AOP是Spring框架的重要组成部分.目前我所接触的AOP实现框架有Spring AOP还有就是AspectJ(还有另外几种我没有接触过).我们先来说说他们的区别: AspectJ是一个比较牛逼的A ...