最近做项目需要读取修改前数据库中被修改的数据所有的信息,一开始想要在model层的每个类都写一个函数return一串字符串,
但是由于表太多,实体类数量太大,写出来太浪费时间,所以决定写一个通用的方法输出
/// <summary> /// 循环输出实体类的各属性名称和属性值 /// </summary> /// <param name="Entity">实体</param> /// <returns></returns> public string ResolvingTableRow(object Entity) { Type EntType = Entity.GetType(); PropertyInfo[] propertys = EntType.GetProperties(); string tempName = string.Empty; foreach (PropertyInfo pi in propertys) { tempName = tempName + pi.Name+":"; string tem = pi.ToString(); if (pi.GetValue(Entity, null) != null) { tempName = tempName + pi.GetValue(Entity, null).ToString()+";"; } else { tempName = tempName + " ;"; } } return tempName; }
既然有通用的遍历实体类属性值的方法,那就一定也有自动生成实体类的方法,两种方法的代码大体上没什么区别
/// 根据类型填充单个实体类 /// </summary> /// <param name="Souce"></param> /// <param name="Entity"></param> /// <param name="EntType"></param> /// <returns></returns> public static object ResolvingTableRow(DataRow Souce, object Entity) { Type EntType = Entity.GetType(); object User = Activator.CreateInstance(EntType); PropertyInfo[] propertys = EntType.GetProperties(); string tempName = string.Empty; foreach (PropertyInfo pi in propertys) { tempName = pi.Name;//将属性名称赋值给临时变量 if (Souce.Table.Columns.Contains(tempName)) { // 判断此属性是否有Setter if (!pi.CanWrite) continue;//该属性不可写,直接跳出 //取值 011 object value = Souce[tempName]; if (value != DBNull.Value) { //value = CheckObjValue(value, pi); //如果非空,则赋给对象的属性 pi.SetValue(User, value, null); } } } return User; }