using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Data.SqlClient; namespace EVCB_OCPP.Domain.ConnectionFactory; public class SqlConnectionFactory : ISqlConnectionFactory where T : DbContext { private readonly ILogger> logger; public string ConnectionString { get; init; } public SqlConnectionFactory(ILogger> logger) { this.logger = logger; } public SqlConnection Create() { var sqlConnection = new SqlConnection(ConnectionString); sqlConnection.Open(); return sqlConnection; } public async Task CreateAsync() { var timer = Stopwatch.StartNew(); long t0, t1; var sqlConnection = new SqlConnection(ConnectionString); t0 = timer.ElapsedMilliseconds; await sqlConnection.OpenAsync(); t1 = timer.ElapsedMilliseconds; timer.Stop(); if (t1 > 500) { logger.LogWarning("{type} SqlConnection Open slow {create}/{open}", typeof(T), t0, t1); } return sqlConnection; } }