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