public async Task <TResult> DeleteAsync <TResult>(long id, string username, Func <TResult> success, Func <string, TResult> failed) { using (var internalConnection = new SqlConnection(connectionString)) { SqlTransaction transaction = null; try { await internalConnection.OpenAsync();; transaction = internalConnection.BeginTransaction(); var query = "Delete From Tasks where Id = @Id"; var cmd = new SqlCommand(string.Empty, internalConnection) { CommandText = query }; cmd.Parameters.Clear(); cmd.Transaction = transaction; cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.BigInt) { Value = id }); var rowsAffected = await cmd.ExecuteNonQueryAsync(); try { await transaction.LogDeleteAsync(entityName, id, username); } catch (Exception ex) { _log.Error(ex, ex.Message, ex.StackTrace); } transaction.Commit(); return(rowsAffected > 0 ? success() : failed("Item not found, or error occurred.")); } catch (SqlException sqlEx) { transaction?.Rollback(); _log.Error(sqlEx, sqlEx.Message, sqlEx.StackTrace); } catch (Exception ex) { transaction?.Rollback(); _log.Error(ex, ex.Message, ex.StackTrace); } return(default(TResult)); } }