C#自动装载数据到实体
这个类可能并没有像你所想的那么灵活,不过能用,欢迎大家提出修改意见
使用说明:
项目中的实体类必须和数据库的表结构一样,否则无法正常使用
在编译环境VS2008 操作系统WIN2003,XP下通过
调用类的源代码如下:
//--------------------------------------------------------------------- // <copyright file="FormartPropty.cs" company="RichCn INC"> // Information Contained Herein is Proprietary and Confidential. // Author: 谭辉 (neumik@163.com) // </copyright> // <summary> // 数据动态实体化处理类 // 开发环境:VS2008 // 注意事项:定义的实体类的属性名称 必须与数据库字段名一致 否则无法正常使用,可用LINQ TO SQL 或者动软生成器动态生成实体类 // </summary> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace Common { public class FormartPropty<T> { public T obj; public FormartPropty(T obj, DataRow row) { Type type = typeof(T); var props = type.GetProperties(); foreach (var item in props) { ///如果DataRow里也包括此列 if (row.Table.Columns.Contains(item.Name)) { ///将DataRow指定列的值赋给value object value = row[item.Name]; ///如果value为null则返回 if (value == DBNull.Value) continue; ///将值做转换 if (item.PropertyType.Equals(typeof(string))) { value = row[item.Name].ToString(); } else if (item.PropertyType.Equals(typeof(int))) { value = Convert.ToInt32(row[item.Name]); } else if (item.PropertyType.Equals(typeof(decimal))) { value = Convert.ToDecimal(row[item.Name]); } else if (item.PropertyType.Equals(typeof(DateTime))) { value = Convert.ToDateTime(row[item.Name]); } else if (item.PropertyType.Equals(typeof(double))) { value = Convert.ToDouble(row[item.Name]); } else if (item.PropertyType.Equals(typeof(bool))) { value = Convert.ToBoolean(row[item.Name]); } ///利用反射自动将value赋值给obj的相应公共属性 item.SetValue(obj, value, null); } } this.obj = obj; } } }
调用方法:
假设有个USER类,传入的参数为DATAROw
FormartPropty<User> fp = new FormartPropty<User>(new User(), vResult.Tables[0].Rows[0]); return fp.obj; //fp.obj就是装载完成后的实体