public async Task <int> ExecuteAsync(Dictionary <string, object> commands) { await using var conn = new MySqlConnection(_connectionString); await conn.OpenAsync(); await using var transaction = await conn.BeginTransactionAsync(); try { using var batch = conn.CreateBatch(); batch.Transaction = transaction; foreach (var(key, value) in commands) { var command = new MySqlBatchCommand(key); command.SetParameters(value); batch.BatchCommands.Add(command); } var result = await batch.ExecuteNonQueryAsync(); await transaction.CommitAsync(); return(result); } catch (Exception) { await transaction.RollbackAsync(); return(0); } }
public static void SetParameters(this MySqlBatchCommand cmd, object parameter) { if (parameter == null) { return; } var paramType = parameter.GetType(); foreach (var item in paramType.GetProperties()) { var itemValue = item.GetValue(parameter); if (itemValue == null) { continue; } cmd.Parameters.AddWithValue(item.Name, item.GetValue(parameter)); } }