feat: ottimizza interfaccia query personalizzate rimuovendo messaggi verbosi

- Rimossi messaggi di successo per validazione query per ridurre ingombro visivo
- Eliminati alert informativi delle colonne rilevate dalla query
- Rimossa notificazione "Query validata!" nella sezione mapping
- Mantenuti solo i messaggi di errore quando necessario
- Migliorata UX con interfaccia più pulita e focalizzata sull'essenziale
- Funzionalità di estrazione colonne e mapping completamente preservata
This commit is contained in:
2025-06-29 16:05:04 +02:00
parent 34b47a2bd4
commit 2238ddc4bf
6 changed files with 663 additions and 90 deletions
+41 -4
View File
@@ -19,7 +19,7 @@ namespace DataConnection.EF;
public class EFCoreDatabaseManager : IDatabaseManager
{
private readonly DbManagerOptions _options;
private ExistingDatabaseContext _context;
private ExistingDatabaseContext _context = null!;
public EFCoreDatabaseManager(DbManagerOptions options)
{
@@ -54,8 +54,8 @@ public class EFCoreDatabaseManager : IDatabaseManager
}
public async Task<IEnumerable<T>> GetAsync<T>(
Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
Expression<Func<T, bool>>? filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>>? orderBy = null,
string includeProperties = "",
int? skip = null,
int? take = null) where T : class
@@ -91,7 +91,7 @@ public class EFCoreDatabaseManager : IDatabaseManager
return await query.ToListAsync();
}
public async Task<T> GetByIdAsync<T>(object id) where T : class
public async Task<T?> GetByIdAsync<T>(object id) where T : class
{
return await _context.Set<T>().FindAsync(id);
}
@@ -101,6 +101,43 @@ public class EFCoreDatabaseManager : IDatabaseManager
return await _context.Set<T>().FromSqlRaw(sql, parameters).ToListAsync();
}
public async Task<List<Dictionary<string, object>>> ExecuteRawQueryAsync(string sql, params object[] parameters)
{
using var command = _context.Database.GetDbConnection().CreateCommand();
command.CommandText = sql;
// Aggiungi i parametri
for (int i = 0; i < parameters.Length; i++)
{
var parameter = command.CreateParameter();
parameter.ParameterName = $"@p{i}";
parameter.Value = parameters[i] ?? DBNull.Value;
command.Parameters.Add(parameter);
}
await _context.Database.OpenConnectionAsync();
var results = new List<Dictionary<string, object>>();
using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
var row = new Dictionary<string, object>();
for (int i = 0; i < reader.FieldCount; i++)
{
var columnName = reader.GetName(i);
var value = reader.IsDBNull(i) ? null : reader.GetValue(i);
row[columnName] = value ?? ""; // Usa stringa vuota invece di null
}
results.Add(row);
}
return results;
}
public async Task<int> ExecuteCommandAsync(string sql, params object[] parameters)
{
return await _context.Database.ExecuteSqlRawAsync(sql, parameters);