public List <T> executeReadStore <T>(String name, StoreResultMapper <T> mapper, List <Parameter> parameters = null)
        {
            using (SqlConnection connection = getConnection()){
                if (parameters == null)
                {
                    parameters = new List <Parameter>();
                }
                connection.Open();
                SqlCommand    command = createSqlCommand(name, connection, parameters);
                SqlDataReader dr      = command.ExecuteReader();
                List <T>      result  = new List <T>();

                using (dr){
                    List <String> columnNames = Enumerable.Range(0, dr.FieldCount).Select(dr.GetName).ToList();

                    while (dr.Read())
                    {
                        Dictionary <String, Object> row = new Dictionary <String, Object>();
                        foreach (var columnName in columnNames)
                        {
                            row.Add(columnName, dr[columnName]);
                        }
                        result.Add(mapper.getMapped(row));
                    }
                }
                return(result);
            }
        }
        public T executeReadSingleResult <T>(String name, StoreResultMapper <T> mapper, List <Parameter> parameters = null)
        {
            List <T> list = executeReadStore <T>(name, mapper, parameters);

            if (list.Count == 1)
            {
                return(list[0]);
            }
            return(default(T));
        }