您的位置:首页 > 其它

PetaPoco入门(二)

2013-06-02 11:31 375 查看
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 方法

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

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


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

// Save a new or existing record
db.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<article>(PetaPoco.Sql.Builder
.Append("SELECT * FROM articles")
.Append("WHERE article_id=@0", id)
)

var id=123;
var a=db.Query<article>(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<article>(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)


出处: /article/5496252.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: