不使用反射的实体类

看过很多ORM的实体类方案,大多是用反射来读数据库数据,这样当频繁操作实体类的时候效率很低,我借鉴了一位朋友的思路,采用.NET 2.0的泛型技术,为实体类提供一个通用的查询和持久化方案。
先看看实体类定义:
  
C# code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using  PWMIS.SqlMapper.Entity;
 
 
namespace  PLZDModel
{
     public  class  PFT_Report : Entity
     {
         public  PFT_Report()
         {
             TableName =  "PFT_Report" ;
             //IdentityName = "标识列";//如果指定了标识列,可以处理自增列插入问题
             //PrimaryKeys.Add("主键列");//指定主键列方可以删除和更新实体数据
 
 
             AddProperty( "ID" default (System.Int32));
             AddProperty( "FinancialPlanersNo" default (System.String));
             AddProperty( "FundAccount" default (System.String));
             AddProperty( "CityCode" default (System.String));
             AddProperty( "BankCode" default (System.String));
             AddProperty( "NetWork" default (System.String));
             AddProperty( "ApplyTime" default (System.DateTime));
             AddProperty( "FileName" default (System.String));
             AddProperty( "GenerateTime" default (System.DateTime));
         }
 
 
         public  System.Int32 ID
         {
             get  return  (System.Int32)getProperty( "ID" ); }
             set  { setProperty( "ID" , value); }
         }
 
         public  System.String FinancialPlanersNo
         {
             get  return  (System.String)getProperty( "FinancialPlanersNo" ); }
             set  { setProperty( "FinancialPlanersNo" , value); }
         }
 
         public  System.String FundAccount
         {
             get  return  (System.String)getProperty( "FundAccount" ); }
             set  { setProperty( "FundAccount" , value); }
         }
 
         public  System.String CityCode
         {
             get  return  (System.String)getProperty( "CityCode" ); }
             set  { setProperty( "CityCode" , value); }
         }
 
         public  System.String BankCode
         {
             get  return  (System.String)getProperty( "BankCode" ); }
             set  { setProperty( "BankCode" , value); }
         }
 
         public  System.String NetWork
         {
             get  return  (System.String)getProperty( "NetWork" ); }
             set  { setProperty( "NetWork" , value); }
         }
 
         public  System.DateTime ApplyTime
         {
             get  return  (System.DateTime)getProperty( "ApplyTime" ); }
             set  { setProperty( "ApplyTime" , value); }
         }
 
         public  System.String FileName
         {
             get  return  (System.String)getProperty( "FileName" ); }
             set  { setProperty( "FileName" , value); }
         }
 
         public  System.DateTime GenerateTime
         {
             get  return  (System.DateTime)getProperty( "GenerateTime" ); }
             set  { setProperty( "GenerateTime" , value); }
         }
 
 
     }
}


之后,便可以这样使用实体类:
1,查询:
C# code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class  Program
     {
         static  void  Main( string [] args)
         {
             PFT_Report utlReport =  new  PFT_Report();
             OQL oqlQuerry =  new  OQL(utlReport);
             utlReport.FundAccount =  "1234234242423" ;
             oqlQuerry.TopCount = 3;
             
             oqlQuerry.Select(utlReport.ApplyTime , utlReport.BankCode,utlReport.FileName ,utlReport.FundAccount )
                 .Where(utlReport.FundAccount)
                 .OrderBy(utlReport.GenerateTime,  "desc" );
             Console.WriteLine ( "SQL=" +oqlQuerry.ToString ());
 
             Console.Read();
 
         }

运行程序将输出:
SQL=SELECT  Top 3 ApplyTime,BankCode,FileName,FundAccount
 FROM PFT_Report
   Where FundAccount=@FundAccount
    Order by FundAccount desc

------------
使用该方式,可以选取实体类指定的字段,而不是一次选取全部字段。这对于一个拥有大字段的表来说很有用。字段的选取都是通过实体类对象.属性 的方式,完全面向对象,用起来有点像LINQ,呵呵。

保存数据也很简单,为指定的属性设置新值即可:
C# code
?
1
2
3
PFT_Report utlReport =  new  PFT_Report();
             utlReport.FundAccount =  "1234234242423" ;
            EntityQuery.Save(utlReport);


你本次更新了多少个字段,框架只会生成要更新的字段的SQL语句,保证了数据更新的效率。

你可能感兴趣的:(ASP.NET(C#))