通过反射自动填充实体
2009-04-06 11:12 w i n s o n 阅读(762) 评论(3) 编辑 收藏 举报之前在完成自己的小型框架时,为了动态去填充实体,于是想到了以下方法,直接通过反射可自动对实体进行填充,这样就不需要每个实体属性去赋值这么麻烦了:
1 /// <summary>
2 /// 填充实体内容
3 /// </summary>
4 /// <param name="targetObj">实体对象</param>
5 /// <param name="dr">DbDataReader对象</param>
6 protected void FillDS(object targetObj, DbDataReader reader)
7 {
8 try
9 {
10 //实现首字母大写,规范所有属性名称
11 System.Globalization.CultureInfo cult = System.Threading.Thread.CurrentThread.CurrentCulture;
12 System.Globalization.TextInfo textInfo = cult.TextInfo;
13 string name = string.Empty;
14
15 for (int i = 0; i < reader.FieldCount; i++)
16 {
17 //使用首字母大写转换,规范属性名以进行匹配
18 name = textInfo.ToTitleCase(reader.GetName(i).ToLower());
19 //根据属性名反射获取属性
20 PropertyInfo propertyInfo = targetObj.GetType().GetProperty(name);
21 if (propertyInfo != null)
22 {
23 //如果值不为空以及属性为可写,则进行写入操作
24 if (reader.GetValue(i) != DBNull.Value && propertyInfo.CanWrite)
25 {
26 //为属性设置值
27 propertyInfo.SetValue(targetObj, reader.GetValue(i), null);
28 }
29 }
30 }
31 }
32 }
2 /// 填充实体内容
3 /// </summary>
4 /// <param name="targetObj">实体对象</param>
5 /// <param name="dr">DbDataReader对象</param>
6 protected void FillDS(object targetObj, DbDataReader reader)
7 {
8 try
9 {
10 //实现首字母大写,规范所有属性名称
11 System.Globalization.CultureInfo cult = System.Threading.Thread.CurrentThread.CurrentCulture;
12 System.Globalization.TextInfo textInfo = cult.TextInfo;
13 string name = string.Empty;
14
15 for (int i = 0; i < reader.FieldCount; i++)
16 {
17 //使用首字母大写转换,规范属性名以进行匹配
18 name = textInfo.ToTitleCase(reader.GetName(i).ToLower());
19 //根据属性名反射获取属性
20 PropertyInfo propertyInfo = targetObj.GetType().GetProperty(name);
21 if (propertyInfo != null)
22 {
23 //如果值不为空以及属性为可写,则进行写入操作
24 if (reader.GetValue(i) != DBNull.Value && propertyInfo.CanWrite)
25 {
26 //为属性设置值
27 propertyInfo.SetValue(targetObj, reader.GetValue(i), null);
28 }
29 }
30 }
31 }
32 }