zoukankan      html  css  js  c++  java
  • 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=huhmsqlexpress;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)
    复制代码

     出处: http://www.cnblogs.com/tinyhu/archive/2013/06/02/3113692.html 

    来源:http://www.cnblogs.com/youring2

  • 相关阅读:
    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
    Identity(三)
    数字证书的使用
    自建mvc5项目里几个类图
    asp.net MVC 常见安全问题及解决方案
    security相关链接整理
    js面向对象编程:if中可以使用哪些作为判断条件呢?
    c#创建Windows service (Windows 服务)基础教程
    angular1框架前台笔记
    angular1.几框架新接口添加
  • 原文地址:https://www.cnblogs.com/jiangqw/p/4502193.html
Copyright © 2011-2022 走看看