Ejemplo n.º 1
0
        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));
            }
        }