using EVCB_OCPP.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EVCB_OCPP.WSServer.Helper; public static class AddPortalDbContext { public const string CommandTimeoutKey = "CommandTimeout"; public static IServiceCollection AddMainDbContext(this IServiceCollection services, IConfiguration configuration) { const string DbUserIdKey = "MainDbUserIdKey"; const string DbPassKey = "MainDbPass"; const string DbConnectionStringKey = "MainDBContext"; AddPortalDbContextInternal(services,configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey, logToConsole: false); return services; } public static IServiceCollection AddMeterValueDbContext(this IServiceCollection services, IConfiguration configuration) { const string DbUserIdKey = "MeterValueDbUserId"; const string DbPassKey = "MeterValueDbPass"; const string DbConnectionStringKey = "MeterValueDBContext"; AddPortalDbContextInternal(services, configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey, logToConsole: false); return services; } public static IServiceCollection AddConnectionLogDbContext(this IServiceCollection services, IConfiguration configuration) { const string DbUserIdKey = "ConnectionLogDbUserId"; const string DbPassKey = "ConnectionLogDbPass"; const string DbConnectionStringKey = "ConnectionLogDBContext"; AddPortalDbContextInternal(services, configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey); return services; } private static void AddPortalDbContextInternal( IServiceCollection services, IConfiguration configuration, string UserIdKey,string DbPassKey, string ConnectionStringKey,bool logToConsole = false) where T : DbContext { var commandTimeout = int.TryParse(configuration[CommandTimeoutKey], out var temp) ? temp : 180; string mainDbUserId = string.IsNullOrEmpty(configuration[UserIdKey]) ? string.Empty : $"user id={configuration[UserIdKey]};"; string mainDbUserPass = string.IsNullOrEmpty(configuration[DbPassKey]) ? string.Empty : $"password={configuration[DbPassKey]};"; services.AddPooledDbContextFactory((serviceProvider, options) => { var cString = configuration.GetConnectionString(ConnectionStringKey); cString = $"{cString}{mainDbUserId}{mainDbUserPass}"; options.UseSqlServer(cString, dbOptions => { dbOptions.CommandTimeout(commandTimeout); }); if(logToConsole) { options.LogTo(Console.WriteLine); } }); } }