AddPortalDbContext.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using EVCB_OCPP.Domain;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace EVCB_OCPP.WSServer.Helper;
  11. public static class AddPortalDbContext
  12. {
  13. public const string CommandTimeoutKey = "CommandTimeout";
  14. public static IServiceCollection AddMainDbContext(this IServiceCollection services, IConfiguration configuration)
  15. {
  16. const string DbUserIdKey = "MainDbUserIdKey";
  17. const string DbPassKey = "MainDbPass";
  18. const string DbConnectionStringKey = "MainDBContext";
  19. AddPortalDbContextInternal<MainDBContext>(services,configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey, logToConsole: true);
  20. return services;
  21. }
  22. public static IServiceCollection AddMeterValueDbContext(this IServiceCollection services, IConfiguration configuration)
  23. {
  24. const string DbUserIdKey = "MeterValueDbUserId";
  25. const string DbPassKey = "MeterValueDbPass";
  26. const string DbConnectionStringKey = "MeterValueDBContext";
  27. AddPortalDbContextInternal<MeterValueDBContext>(services, configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey, logToConsole: true);
  28. return services;
  29. }
  30. public static IServiceCollection AddConnectionLogDbContext(this IServiceCollection services, IConfiguration configuration)
  31. {
  32. const string DbUserIdKey = "ConnectionLogDbUserId";
  33. const string DbPassKey = "ConnectionLogDbPass";
  34. const string DbConnectionStringKey = "ConnectionLogDBContext";
  35. AddPortalDbContextInternal<ConnectionLogDBContext>(services, configuration, DbUserIdKey, DbPassKey, DbConnectionStringKey);
  36. return services;
  37. }
  38. private static void AddPortalDbContextInternal<T>(
  39. IServiceCollection services, IConfiguration configuration,
  40. string UserIdKey,string DbPassKey, string ConnectionStringKey,bool logToConsole = false) where T : DbContext
  41. {
  42. var commandTimeout = int.TryParse(configuration[CommandTimeoutKey], out var temp) ? temp : 180;
  43. string mainDbUserId = string.IsNullOrEmpty(configuration[UserIdKey]) ? string.Empty : $"user id={configuration[UserIdKey]};";
  44. string mainDbUserPass = string.IsNullOrEmpty(configuration[DbPassKey]) ? string.Empty : $"password={configuration[DbPassKey]};";
  45. services.AddPooledDbContextFactory<T>((serviceProvider, options) => {
  46. var cString = configuration.GetConnectionString(ConnectionStringKey);
  47. cString = $"{cString}{mainDbUserId}{mainDbUserPass}";
  48. options.UseSqlServer(cString, dbOptions =>
  49. {
  50. dbOptions.CommandTimeout(commandTimeout);
  51. });
  52. if(logToConsole)
  53. {
  54. options.LogTo(Console.WriteLine);
  55. }
  56. });
  57. }
  58. }