#if ASYNC using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dapper { public abstract partial class Database where TDatabase : Database, new() { public partial class Table { /// /// Insert a row into the db asynchronously /// /// Either DynamicParameters or an anonymous type or concrete type /// public virtual async Task InsertAsync(dynamic data) { var o = (object)data; List paramNames = GetParamNames(o); paramNames.Remove("Id"); string cols = string.Join(",", paramNames); string colsParams = string.Join(",", paramNames.Select(p => "@" + p)); var sql = "set nocount on insert " + TableName + " (" + cols + ") values (" + colsParams + ") select cast(scope_identity() as int)"; return (await database.QueryAsync(sql, o).ConfigureAwait(false)).Single(); } /// /// Update a record in the DB asynchronously /// /// /// /// public Task UpdateAsync(TId id, dynamic data) { List paramNames = GetParamNames((object)data); var builder = new StringBuilder(); builder.Append("update ").Append(TableName).Append(" set "); builder.AppendLine(string.Join(",", paramNames.Where(n => n != "Id").Select(p => p + "= @" + p))); builder.Append("where Id = @Id"); DynamicParameters parameters = new DynamicParameters(data); parameters.Add("Id", id); return database.ExecuteAsync(builder.ToString(), parameters); } /// /// Delete a record for the DB asynchronously /// /// /// public async Task DeleteAsync(TId id) { return (await database.ExecuteAsync("delete from " + TableName + " where Id = @id", new { id }).ConfigureAwait(false)) > 0; } /// /// Grab a record with a particular Id from the DB asynchronously /// /// /// public async Task GetAsync(TId id) { return (await database.QueryAsync("select * from " + TableName + " where Id = @id", new { id }).ConfigureAwait(false)).FirstOrDefault(); } public virtual async Task FirstAsync() { return (await database.QueryAsync("select top 1 * from " + TableName).ConfigureAwait(false)).FirstOrDefault(); } public Task> AllAsync() { return database.QueryAsync("select * from " + TableName); } } public Task ExecuteAsync(string sql, dynamic param = null) { return _connection.ExecuteAsync(sql, param as object, _transaction, this._commandTimeout); } public Task> QueryAsync(string sql, dynamic param = null) { return _connection.QueryAsync(sql, param as object, _transaction, _commandTimeout); } public Task> QueryAsync(string sql, Func map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null) { return _connection.QueryAsync(sql, map, param as object, transaction, buffered, splitOn); } public Task> QueryAsync(string sql, Func map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null) { return _connection.QueryAsync(sql, map, param as object, transaction, buffered, splitOn); } public Task> QueryAsync(string sql, Func map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null) { return _connection.QueryAsync(sql, map, param as object, transaction, buffered, splitOn); } public Task> QueryAsync(string sql, Func map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null) { return _connection.QueryAsync(sql, map, param as object, transaction, buffered, splitOn); } public Task> QueryAsync(string sql, dynamic param = null) { return _connection.QueryAsync(sql, param as object, _transaction); } public Task QueryMultipleAsync(string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null) { return SqlMapper.QueryMultipleAsync(_connection, sql, param, transaction, commandTimeout, commandType); } } } #endif