public void Load(Type objectType, IList list, IDataReader dr) { if (objectType.IsPrimitive || (objectType == typeof(string))) { while (dr.Read()) { object val = dr[0]; if (val == DBNull.Value) { if (objectType == typeof(string)) { list.Add(null); } else { list.Add(Activator.CreateInstance(objectType)); } } else { list.Add(Convert.ChangeType(val, objectType)); } } } else { int fieldcount = dr.FieldCount; List <string> fieldnames = new List <string>(); for (int i = 0; i < fieldcount; i++) { fieldnames.Add(dr.GetName(i)); } TableMapping tableMapping = MappingService.Instance.GetTableMapping(objectType, false); while (dr.Read()) { object obj = Activator.CreateInstance(objectType); IDynamicProperty dynObj = obj as IDynamicProperty; foreach (string fieldname in fieldnames) { object val = dr[fieldname]; ColumnMapping column = null; if (tableMapping != null) { column = tableMapping.GetColumnMappingByColumn(fieldname); } if (column != null) { column.SetValue(obj, val); } else if (val != DBNull.Value) { PropertyInfo prop = objectType.GetProperty(fieldname); if (prop == null && dynObj != null) { dynObj.SetData(fieldname, val); } else if (prop != null) { if (val.GetType() != prop.PropertyType) { val = Convert.ChangeType(val, prop.PropertyType); } prop.SetValue(obj, val, null); } } } list.Add(obj); } } }