private void BuildSetter() { Setter = new SetHandler[rdr.FieldCount]; EnumType = new Type[rdr.FieldCount]; Type tp = typeof(TEntity); TableDef td = MetaData.GetTableDef(tp); for (int i = 0; i < rdr.FieldCount; i++) { string Name = rdr.GetName(i); FieldDef fld = td.GetFieldDef(Name); if (fld != null) { Setter[i] = fld.GetLoadSetHandler(); if (fld.IsEnum) { EnumType[i] = fld.FieldType; } } else { MemberInfo[] mis = tp.GetMember("_" + Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (mis.Length == 0) { mis = tp.GetMember(Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } if (mis.Length == 0) { Setter[i] = null; } else { if (mis[0].MemberType == MemberTypes.Field) { Type ft = ((FieldInfo)mis[0]).FieldType; if (ft.IsEnum) { EnumType[i] = ft; } } else { Type ft = ((PropertyInfo)mis[0]).PropertyType; if (ft.IsEnum) { EnumType[i] = ft; } } Setter[i] = DynamicMethodCompiler.CreateSetHandler(mis[0]); } } } }