protected IList <T> QueryObjects <T>(string query, JoinOn joinOn, params object[] arguments) { using (var conn = CreateOpenConnection()) using (var selectStatement = CreateCommand(conn, query, arguments)) using (var dataReader = selectStatement.ExecuteReader()) { var objects = new List <T>(); while (dataReader.Read()) { var obj = new ResultSetObjectMapper <T>(dataReader, joinOn).MapResultToType(); objects.Add(obj); } return(objects); } }
private void MapAssociations(object obj, ISet <string> associationsToMap) { var mappedCollections = new Dictionary <string, ICollection <object> >(); while (_dataReader.NextResult()) { foreach (var fieldName in associationsToMap) { var associationField = typeof(T).GetField(fieldName); var associationFieldType = default(Type); var collection = default(ICollection <object>); if (typeof(IEnumerable).IsAssignableFrom(associationField.FieldType)) { if (!mappedCollections.TryGetValue(fieldName, out collection)) { collection = CreateCollectionFrom(associationField.FieldType); mappedCollections.Add(fieldName, collection); associationField.SetValue(obj, collection); } var genericType = associationField.FieldType.GetGenericTypeDefinition(); associationFieldType = genericType.GetGenericArguments()[0]; } else { associationFieldType = associationField.FieldType; } var columnName = FieldNameToColumnName(fieldName); var mapper = new ResultSetObjectMapper <object>(_dataReader, _joinOn, ToObjectPrefix(columnName)); var associationObject = mapper.MapResultToType(); if (collection != null) { collection.Add(associationObject); } else { associationField.SetValue(obj, associationObject); } } } }