using Data.Entities; using System.Configuration; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Protocols; using Microsoft.Extensions.Configuration; namespace Data.Models { public class OperationsHubContext : DbContext { // Constructor que permite la inyección de dependencias public OperationsHubContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { // Leer la cadena de conexión desde app.config var connectionString = ConfigurationManager.ConnectionStrings["OperationsHub"]?.ConnectionString; if (connectionString == null) { throw new InvalidOperationException("No se encontró la cadena de conexión 'OperationsHub'."); } optionsBuilder.UseSqlServer(connectionString); // Prueba de conexión: Intento de apertura de conexión using (var connection = new SqlConnection(connectionString)) { connection.Open(); // Lanza excepción si falla System.Diagnostics.Debug.WriteLine("Conexión a la base de datos exitosa."); connection.Close(); } } } public bool TestConnection(string connectionString) { using (var connection = new SqlConnection(connectionString)) { try { connection.Open(); return true; // Conexión exitosa } catch (Exception ex) { // Manejar la excepción, tal vez loguearla Console.WriteLine($"Error al conectar: {ex.Message}"); return false; // Conexión fallida } } } public DbSet Tickets { get; set; } public DbSet TicketsDashboardResults { get; set; } public DbSet TicketsSummaryResults { get; set; } public async Task> Tickets_DashboardAsync(string estadoParam, string ordenParam) { var estadoParamSql = new SqlParameter("@EstadoParam", estadoParam ?? (object)DBNull.Value); var ordenParamSql = new SqlParameter("@OrdenParam", ordenParam ?? (object)DBNull.Value); // Consulta usando FromSqlRaw sobre el DbSet correspondiente return await TicketsDashboardResults .FromSqlRaw("EXEC Tickets_Dashboard @EstadoParam, @OrdenParam", estadoParamSql, ordenParamSql) .ToListAsync(); } public async Task> Tickets_GetSummaryAsync() { // Consulta usando FromSqlRaw sobre el DbSet correspondiente return await TicketsSummaryResults .FromSqlRaw("EXEC Tickets_GetSummary") .ToListAsync(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("PhOH_Tickets"); // Marcar los DbSet de resultados como entidades de solo lectura modelBuilder.Entity().HasNoKey(); modelBuilder.Entity().HasNoKey(); } } }