代码改变世界

轻量级ORM框架--PetaPoCo

2014-10-10 10:55  看看能坚持多久!  阅读(599)  评论(0编辑  收藏  举报

             ORM框架在开发中有着非常重要的作用,我之前用过也好几个了有些是公司自己开发的,还有些第三方的,但是如果在一个不是很大型的项目中,我觉得这个PetaPoCo是完全可以胜任了的使用也比较简单,接下去我简单介绍下。

      首先在项目中添加petapoco:

            

             然后配置下数据库连接参数和输入命名空间(当然必须现在配置文件中添加节点哦):

    

      然后保存下就会自动生成数据库对应的实体(非常方便),下面是做测试的简单的增删改查:

       
 1             //查询
 2             var v = db.Fetch<BTest>("select * from BTest where Keyid='123'")[0];
 3             int Id = v.Id;
 4             string Keyid = v.Keyid;
 5             string name = v.Bname;
 6             v.Bname = "李四";
 7             //修改,添加
 8             v.Save();
 9             //删除
10             //v.Delete(); 
11             //单个实体查询
12             //var c = db.SingleOrDefault<BTest>("where Keyid='123'");
13             //Response.Write(c.Bname);
14             //非常简单的事务
15             //事务开始
16             //db.BeginTransaction();
17             //try
18             //{
19             //    var c = db.Execute("update btest set bname='张三'  where keyid='123'");
20             //    int f = db.Execute("insert into btest(bname,keyid)values('老四','234')");
21             //    提交事务
22             //    db.CompleteTransaction();
23             //    int d = db.Execute("insert into btest(bname,keyid)('老三','234')");
24             //}
25             //catch
26             //{
27                    //事务回滚
28             //    db.AbortTransaction();
29             //}    
View Code

             下面是一个PetaPoCo的分页:

     1.先来看下分页模型:

    
 1        public class Page<T>
 2     {
 3         /// <summary>
 4         /// 当前页码
 5         /// </summary>
 6         public long CurrentPage 
 7         { 
 8             get; 
 9             set; 
10         }
11 
12         /// <summary>
13         ///总页码
14         /// </summary>
15         public long TotalPages 
16         { 
17             get; 
18             set; 
19         }
20 
21         /// <summary>
22         /// 总条数
23         /// </summary>
24         public long TotalItems 
25         { 
26             get; 
27             set; 
28         }
29 
30         /// <summary>
31         /// 每页显示条数
32         /// </summary>
33         public long ItemsPerPage 
34         { 
35             get; 
36             set; 
37         }
38 
39         /// <summary>
40         /// 记录集合
41         /// </summary>
42         public List<T> Items 
43         { 
44             get; 
45             set; 
46         }
47 
48         /// <summary>
49         ///自定义任何值
50         /// </summary>
51         public object Context 
52         { 
53             get; 
54             set; 
55         }
56     }
View Code

       2.分页的使用Demo:

    
 1             //cts是指请求的页码,ts是指没页显示的条数
 2            Page<UsersT> pf = db.Page<UsersT>(cts, ts, "select * from userst order by id  desc");
 3             content.Text = "当前第" + pf.CurrentPage + "" + " " + "总共" + pf.TotalPages + "" + " " + "总共" + pf.TotalItems + "条记录" + " " + "每页显示" + pf.ItemsPerPage + "条记录";
 4             foreach (var item in pf.Items)
 5             {
 6                 string str = "</br>" + item.ID + " ";
 7                 str += item.UserZhangFu + " ";
 8                 str += item.Mobile;
 9                 str += "</br>";
10                 content.Text += str;
11             }    
View Code

    我设置断点看了下,最后是通过这个sql语句的形式请求的数据库:

 

    最后的效果如下:

       

     有时候从数据库取数据可能涉及到多张表,而数据库又没建立对应的视图,那就需要临时实体类似mvc中的视图model,下面是我添加的一个测试实体:

    
1     public class TestDB
2     {
3         public string UserZhangFu { get; set; }
4         public string Mobile { get; set; }
5         public string Bname { get; set; }
6     }
View Code

    使用和之前的一样,非常方便不需要做任何的配置:

    
1             var v = db.Fetch<TestDB>("select UserZhangFu,Mobile,Bname from Userst as a left join Btest as b on a.id=b.id where a.id=2 ")[0];
2             Response.Write(v.UserZhangFu+"  "+v.Mobile+"   "+v.Bname);            
View Code

    输出效果如下:

       

     上面对PetaPoCo做了非常简单的使用介绍,而这个框架是完全开源的,所以在使用过程中可以F12看下底层是如何构建sql语句,如何给实体属性赋值等等一系列,其实大多数的ORM框架都是比较类似的,熟悉一种也就基本能了解ORM的整个思路了,仅供参考!