DbContextCommand.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Microsoft.Data.SqlClient;
  2. using Microsoft.EntityFrameworkCore;
  3. using Quadarax.Application.QLiberace.Base;
  4. using Quadarax.Application.QLiberace.Customer;
  5. using Quadarax.Foundation.Core.QConsole.Command.Base;
  6. using Quadarax.Foundation.Core.QConsole;
  7. using Quadarax.Foundation.Core.Value;
  8. using Quadarax.Foundation.Core.Data.Domain;
  9. using Quadarax.Foundation.Core.Data.Interface.Domain;
  10. namespace Quadarax.Application.QLiberace.Console.Commands.Base
  11. {
  12. internal abstract class DbContextCommand : AbstractCommand
  13. {
  14. #region *** Properties ***
  15. #endregion
  16. #region *** Private fields ***
  17. #endregion
  18. #region *** Constructor ***
  19. public DbContextCommand(Engine engine) : base(engine)
  20. {
  21. }
  22. #endregion
  23. #region *** EXECUTE ***
  24. protected override Result OnExecute()
  25. {
  26. using (var dcResolver = new DomainContextResolver())
  27. {
  28. RegisterDbContext(dcResolver);
  29. return OnExecute(dcResolver);
  30. }
  31. }
  32. protected abstract Result OnExecute(IDomainContextResolver resolver);
  33. protected virtual void RegisterDbContext(IDomainContextResolver rcResolver)
  34. {
  35. rcResolver.Register(new QlbrcDbContext(new DbContextOptions<QlbrcDbContext>()));
  36. rcResolver.Register(new QlbrcDbContextCustomer(new DbContextOptions<QlbrcDbContextCustomer>()));
  37. }
  38. #endregion
  39. #region *** Private operations ***
  40. protected Result HandleConnectionException(SqlException e)
  41. {
  42. if (e.Message.Contains("A network-related or instance-specific error occurred while establishing a connection to SQL Server"))
  43. {
  44. WriteError(e);
  45. return new Result(Constants.ReturnCodes.CannotConnectToServer);
  46. }
  47. throw e;
  48. }
  49. #endregion
  50. }
  51. }