Exemplo n.º 1
0
        public virtual async Task <IEnumerable <T> > SelectAsync <T>(MapperDb db, DbCommand command) where T : new()
        {
            var result = ResultsetCache.Get(db, command);

            if (result != null)
            {
                return(result.ToObject <T>());
            }

            var connection = db.GetConnection();

            if (connection == null)
            {
                throw new MapperException("Could not create database connection.");
            }

            await db.OpenSharedConnectionAsync().ConfigureAwait(false);

            command.Connection  = connection;
            command.Transaction = db.GetTransaction();

            using (var reader = await command.ExecuteReaderAsync().ConfigureAwait(false))
            {
                if (!reader.HasRows)
                {
                    return(new List <T>());
                }

                var mapped     = new Collection <ICollection <KeyValuePair <string, object> > >();
                var properties = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();

                while (await reader.ReadAsync().ConfigureAwait(false))
                {
                    var instance = new Collection <KeyValuePair <string, object> >();

                    foreach (string property in properties)
                    {
                        var value = reader[property];

                        if (value == DBNull.Value)
                        {
                            value = null;
                        }


                        instance.Add(new KeyValuePair <string, object>(property.ToPascalCase(), value));
                    }

                    mapped.Add(instance);
                }

                ResultsetCache.Set(db, command, mapped);
                return(mapped.ToObject <T>());
            }
        }
Exemplo n.º 2
0
        public virtual async Task NonQueryAsync(MapperDb db, DbCommand command)
        {
            var connection = db.GetConnection();

            if (connection == null)
            {
                throw new MapperException("Could not create database connection.");
            }

            await db.OpenSharedConnectionAsync().ConfigureAwait(false);

            command.Connection  = connection;
            command.Transaction = db.GetTransaction();

            await command.ExecuteNonQueryAsync().ConfigureAwait(false);
        }
Exemplo n.º 3
0
        public virtual async Task <T> ScalarAsync <T>(MapperDb db, DbCommand command)
        {
            var connection = db.GetConnection();

            if (connection == null)
            {
                throw new MapperException("Could not create database connection.");
            }

            await db.OpenSharedConnectionAsync().ConfigureAwait(false);

            command.Connection  = connection;
            command.Transaction = db.GetTransaction();

            var value = await command.ExecuteScalarAsync().ConfigureAwait(false);

            return(value.To <T>());
        }