internal static T MapTo <T>(this IDataRecord record, SetterMap <T> setterMap) { var result = Activator.CreateInstance <T>(); foreach (var item in setterMap) { var val = DBNullHelper.FromDb(record.GetValue(item.FieldIndex)); var setter = item.Action; setter(result, val); } return(result); }
internal static SetterMap <T> GetSetterMap <T>(this IDataReader reader, DbConfig config) { var map = new SetterMap <T>(); var convention = config.MappingConvention; var setters = FastReflection.Instance.GetSettersForType <T>(); for (var i = 0; i < reader.FieldCount; i++) { var columnName = convention.FromDb(reader.GetName(i)); if (setters.TryGetValue(columnName, out var setter)) { map.Add(new Setter <T>(i, setter)); } } return(map); }