首页 - 网络编程 - PetaPoco入门(二)2013-06-02 12:34:-冷月TinyHU-点击数: 19491.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=***;p ooling=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 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<article>("SELECT * FROM articles WHERE article_id=@0", 123);// Change ita.content="测试数据 by tinyhu";// Save itb.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 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<article>("SELECT * FROM articles WHERE article_id=@0", 123);可简写为:// Get a recordvar 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 recorddb.Save(a);1.14.事务Transactions使用事务非常简单,只需要声明如下:using (var scope=db.Transaction){// 其他任务处理…// Commitplete();}事务可以嵌套,只有当事务中的所有语句成功执行时才会commit,否则rollback。