AddPortalDbContext.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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);
  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);
  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) 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>((options) => {
  46. var cString = configuration.GetConnectionString(ConnectionStringKey);
  47. cString = $"{cString}{mainDbUserId}{mainDbUserPass}";
  48. options.UseSqlServer(cString, dbOptions =>
  49. {
  50. dbOptions.CommandTimeout(commandTimeout);
  51. });
  52. });
  53. }
  54. }