自老毛开始发布他的MySoft.Data系列组件,也陆续开始写Mysoft.Data使用系列的文章,我也尝试着写一点自己在研究和使用MySoft.Data过程中的一些心得。
本章介绍Mysoft.Data在作为一个ORM组件应用在系统中时,如何把MySoft.Data生成的实体转换成“干净”的实体,以实现系统和ORM之间的解耦。
大家都知道,一般ORM组件会有他们自己的特定的实体,例如EF的实体,或者其他ORM组件的实体,要么通过Attribute标记,要么xml文档配置,总而言之就是要把实体的结构跟数据表结构联系起来,MySoft.Data也不例外,大家来看它生成的实体:
1 /// <summary>
2 /// 表名:Category 主键列:CategoryID
3 /// </summary>
4 [SerializableAttribute()]
5 public partial class Category : Entity
6 {
7
8 protected Int32 _CategoryID;
9
10 protected String _Name;
11
12 protected Int32 _UserID;
13
14 public Int32 CategoryID
15 {
16 get
17 {
18 return this._CategoryID;
19 }
20 set
21 {
22 this.OnPropertyValueChange(_.CategoryID, _CategoryID, value);
23 this._CategoryID = value;
24 }
25 }
26
27 public String Name
28 {
29 get
30 {
31 return this._Name;
32 }
33 set
34 {
35 this.OnPropertyValueChange(_.Name, _Name, value);
36 this._Name = value;
37 }
38 }
39
40 public Int32 UserID
41 {
42 get
43 {
44 return this._UserID;
45 }
46 set
47 {
48 this.OnPropertyValueChange(_.UserID, _UserID, value);
49 this._UserID = value;
50 }
51 }
52
53 /// <summary>
54 /// 获取实体对应的表名
55 /// </summary>
56 protected override Table GetTable()
57 {
58 return new Table<Category>("Category");
59 }
60
61 /// <summary>
62 /// 获取实体中的标识列
63 /// </summary>
64 protected override Field GetIdentityField()
65 {
66 return _.CategoryID;
67 }
68
69 /// <summary>
70 /// 获取实体中的主键列
71 /// </summary>
72 protected override Field[] GetPrimaryKeyFields()
73 {
74 return new Field[] {
75 _.CategoryID};
76 }
77
78 /// <summary>
79 /// 获取列信息
80 /// </summary>
81 protected override Field[] GetFields()
82 {
83 return new Field[] {
84 _.CategoryID,
85 _.Name,
86 _.UserID};
87 }
88
89 /// <summary>
90 /// 获取列数据
91 /// </summary>
92 protected override object[] GetValues()
93 {
94 return new object[] {
95 this._CategoryID,
96 this._Name,
97 this._UserID};
98 }
99
100 /// <summary>
101 /// 给当前实体赋值
102 /// </summary>
103 protected override void SetValues(IRowReader reader)
104 {
105 if ((false == reader.IsDBNull(_.CategoryID)))
106 {
107 this._CategoryID = reader.GetInt32(_.CategoryID);
108 }
109 if ((false == reader.IsDBNull(_.Name)))
110 {
111 this._Name = reader.GetString(_.Name);
112 }
113 if ((false == reader.IsDBNull(_.UserID)))
114 {
115 this._UserID = reader.GetInt32(_.UserID);
116 }
117 }
118
119 public override int GetHashCode()
120 {
121 return base.GetHashCode();
122 }
123
124 public override bool Equals(object obj)
125 {
126 if ((obj == null))
127 {
128 return false;
129 }
130 if ((false == typeof(Category).IsAssignableFrom(obj.GetType())))
131 {
132 return false;
133 }
134 if ((((object)(this)) == ((object)(obj))))
135 {
136 return true;
137 }
138 return false;
139 }
140
141 public class _
142 {
143
144 /// <summary>
145 /// 表示选择所有列,与*等同
146 /// </summary>
147 public static AllField All = new AllField<Category>();
148
149 /// <summary>
150 /// 字段名:CategoryID - 数据类型:Int32
151 /// </summary>
152 public static Field CategoryID = new Field<Category>("CategoryID");
153
154 /// <summary>
155 /// 字段名:Name - 数据类型:String
156 /// </summary>
157 public static Field Name = new Field<Category>("Name");
158
159 /// <summary>
160 /// 字段名:UserID - 数据类型:Int32
161 /// </summary>
162 public static Field UserID = new Field<Category>("UserID");
163 }
164 }
2 /// 表名:Category 主键列:CategoryID
3 /// </summary>
4 [SerializableAttribute()]
5 public partial class Category : Entity
6 {
7
8 protected Int32 _CategoryID;
9
10 protected String _Name;
11
12 protected Int32 _UserID;
13
14 public Int32 CategoryID
15 {
16 get
17 {
18 return this._CategoryID;
19 }
20 set
21 {
22 this.OnPropertyValueChange(_.CategoryID, _CategoryID, value);
23 this._CategoryID = value;
24 }
25 }
26
27 public String Name
28 {
29 get
30 {
31 return this._Name;
32 }
33 set
34 {
35 this.OnPropertyValueChange(_.Name, _Name, value);
36 this._Name = value;
37 }
38 }
39
40 public Int32 UserID
41 {
42 get
43 {
44 return this._UserID;
45 }
46 set
47 {
48 this.OnPropertyValueChange(_.UserID, _UserID, value);
49 this._UserID = value;
50 }
51 }
52
53 /// <summary>
54 /// 获取实体对应的表名
55 /// </summary>
56 protected override Table GetTable()
57 {
58 return new Table<Category>("Category");
59 }
60
61 /// <summary>
62 /// 获取实体中的标识列
63 /// </summary>
64 protected override Field GetIdentityField()
65 {
66 return _.CategoryID;
67 }
68
69 /// <summary>
70 /// 获取实体中的主键列
71 /// </summary>
72 protected override Field[] GetPrimaryKeyFields()
73 {
74 return new Field[] {
75 _.CategoryID};
76 }
77
78 /// <summary>
79 /// 获取列信息
80 /// </summary>
81 protected override Field[] GetFields()
82 {
83 return new Field[] {
84 _.CategoryID,
85 _.Name,
86 _.UserID};
87 }
88
89 /// <summary>
90 /// 获取列数据
91 /// </summary>
92 protected override object[] GetValues()
93 {
94 return new object[] {
95 this._CategoryID,
96 this._Name,
97 this._UserID};
98 }
99
100 /// <summary>
101 /// 给当前实体赋值
102 /// </summary>
103 protected override void SetValues(IRowReader reader)
104 {
105 if ((false == reader.IsDBNull(_.CategoryID)))
106 {
107 this._CategoryID = reader.GetInt32(_.CategoryID);
108 }
109 if ((false == reader.IsDBNull(_.Name)))
110 {
111 this._Name = reader.GetString(_.Name);
112 }
113 if ((false == reader.IsDBNull(_.UserID)))
114 {
115 this._UserID = reader.GetInt32(_.UserID);
116 }
117 }
118
119 public override int GetHashCode()
120 {
121 return base.GetHashCode();
122 }
123
124 public override bool Equals(object obj)
125 {
126 if ((obj == null))
127 {
128 return false;
129 }
130 if ((false == typeof(Category).IsAssignableFrom(obj.GetType())))
131 {
132 return false;
133 }
134 if ((((object)(this)) == ((object)(obj))))
135 {
136 return true;
137 }
138 return false;
139 }
140
141 public class _
142 {
143
144 /// <summary>
145 /// 表示选择所有列,与*等同
146 /// </summary>
147 public static AllField All = new AllField<Category>();
148
149 /// <summary>
150 /// 字段名:CategoryID - 数据类型:Int32
151 /// </summary>
152 public static Field CategoryID = new Field<Category>("CategoryID");
153
154 /// <summary>
155 /// 字段名:Name - 数据类型:String
156 /// </summary>
157 public static Field Name = new Field<Category>("Name");
158
159 /// <summary>
160 /// 字段名:UserID - 数据类型:Int32
161 /// </summary>
162 public static Field UserID = new Field<Category>("UserID");
163 }
164 }