博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PetaPoco详解2
阅读量:6901 次
发布时间:2019-06-27

本文共 5067 字,大约阅读时间需要 16 分钟。

1. Petapoco基本用法

1.1. 创建示例工程

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

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

1.2. 添加petapoco包

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

1.3. 添加数据库连接

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

下面是连接SQL Server:

 

 

 

下面是连接MySQL:

 

由于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
("SELECT * FROM articles")){ Console.WriteLine("{0} - {1}", a.article_id, a.title);}//查询标量long count=db.ExecuteScalar
("SELECT Count(*) FROM articles");//查询单条数据var a = db.SingleOrDefault
("SELECT * FROM articles WHERE article_id=@0", 123));

 

 

1.7. 分页查询

 
var result=db.Page
(1, 20, // <-- page number and items per page "SELECT * FROM articles WHERE category=@0 ORDER BY date_posted DESC", "coolstuff");

 

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

 
public class Page
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
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 articlevar a=new article();a.title="我的标题";a.content="测试数据 by tinyhu";a.date_created=DateTime.UtcNow;// Insert itdb.Insert("articles", "article_id", a);

 

更新数据:

 
// Get a recordvar a=db.SingleOrDefault
("SELECT * FROM articles WHERE article_id=@0", 123);// Change ita.content="测试数据 by tinyhu";// Save itdb.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 recorddb.Delete("articles", "article_id", a);// Or if you already have the ID elsewheredb.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 recordvar a=new article();a.title="测试标题";a.content="测试数据 by tinyhu ";a.date_created=DateTime.UtcNow;db.Insert(a);// Update ita.content="修改,修改 …";db.Update(a);// Delete itdb.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 recordvar a=db.SingleOrDefault
("SELECT * FROM articles WHERE article_id=@0", 123);

 

可简写为:

// Get a recordvar a=db.SingleOrDefault
("WHERE article_id=@0", 123);

 

1.13. IsNew 及 Save 方法

使用IsNew可以检测记录是否在数据表中存在:

// Is this a new record if (db.IsNew(a)){    // Yes it is...}

 

Save方法会自动发送Insert(如果表中不存在)或Update子句。

 
// Save a new or existing recorddb.Save(a);

 

1.14. 事务Transactions

使用事务非常简单,只需要声明如下:

using (var scope=db.Transaction){    // 其他任务处理 …    // Commit    scope.Complete();}

 

事务可以嵌套,只有当事务中的所有语句成功执行时才会commit,否则rollback。

1.15. PetaPoco的SQL Builder

下面是最简单的形式:

var id=123;var a=db.Query
(PetaPoco.Sql.Builder .Append("SELECT * FROM articles") .Append("WHERE article_id=@0", id))var id=123;var a=db.Query
(PetaPoco.Sql.Builder .Append("SELECT * FROM articles") .Append("WHERE article_id=@0", id) .Append("AND date_created<@0", DateTime.UtcNow))

 

可以附加条件判断动态生成子句

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
(sql)

 

注意每个append子句使用参数: @0? PetaPoco构建参数列表并自动完成赋值。

可以使用命名参数,如下示例。

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)

转载于:https://www.cnblogs.com/shenml/p/3396477.html

你可能感兴趣的文章
JSONPlaceholder - 免费的在线REST服务(提供测试用的HTTP请求假数据)
查看>>
今天购买了一个云服务器
查看>>
C#以管理员身份运行程序
查看>>
关于学习uCOS-II
查看>>
BZOJ3572:[HNOI2014]世界树——题解
查看>>
inline 函数
查看>>
[摘录]遇见未知的自己(二)
查看>>
python基础===修改idle的输入风格
查看>>
对Linux下TCP连接相关配置的优化记录(转载)
查看>>
微信里如何判断页面被分享成功
查看>>
报错ERR_CONNECTION_REFUSED,如何解决(原创)
查看>>
****HTML模板资源汇总
查看>>
实现裴波纳契数列求和
查看>>
Entity Framework Tutorial Basics(19):Change Tracking
查看>>
Maximum Flow Exhaustion of Paths Algorithm
查看>>
【IOC框架】分析与理解
查看>>
用 MuGo 搭建 Go Engine 在 KGS 对战
查看>>
第二篇*2、Python字符串格式化
查看>>
正则表达式以过滤特殊字符
查看>>
关于bootstrap
查看>>