DbUpdateCmd.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Microsoft.Data.SqlClient;
  2. using Quadarax.Application.QLiberace.Console.Commands.Base;
  3. using Quadarax.Foundation.Core.QConsole.Argument;
  4. using Quadarax.Foundation.Core.QConsole;
  5. using Quadarax.Foundation.Core.Value;
  6. using Microsoft.EntityFrameworkCore;
  7. using Quadarax.Foundation.Core.QConsole.Attributes;
  8. using Quadarax.Foundation.Core.Data.Interface.Domain;
  9. namespace Quadarax.Application.QLiberace.Console.Commands
  10. {
  11. [CommandDefinition]
  12. internal class DbUpdateCmd : DbMigrationCommand
  13. {
  14. #region *** Properties ***
  15. public override string Name => Constants.Commands.DbUpdate.Name;
  16. public override string Description => Constants.Commands.DbUpdate.Description;
  17. #endregion
  18. #region *** Fields ***
  19. private bool _isListOnly;
  20. #endregion
  21. #region *** Constructor ***
  22. public DbUpdateCmd(Engine engine) : base(engine)
  23. {
  24. }
  25. #endregion
  26. #region *** EXECUTE ***
  27. protected override Result OnExecute(IDomainContextResolver resolver)
  28. {
  29. var resultCode = 0;
  30. foreach (var contextCode in resolver.RegisteredContexts)
  31. {
  32. var context = (DbContext)resolver.Get(contextCode);
  33. WriteInfo($"Connecting database [{context.Database.GetDbConnection().Database}]...");
  34. try
  35. {
  36. if (context.Database.CanConnect())
  37. {
  38. if (_isListOnly)
  39. {
  40. WriteInfo("Pending migrations list:");
  41. var migrations = context.Database.GetPendingMigrations().ToArray();
  42. if (migrations.Length > 0)
  43. {
  44. foreach (var mig in migrations)
  45. WriteInfo(mig);
  46. }
  47. else
  48. {
  49. WriteInfo("No pending migrations present.");
  50. }
  51. WriteWarning("No migration applied.");
  52. }
  53. else
  54. {
  55. ApplyMigration(context);
  56. WriteWarning("Migration applied.");
  57. }
  58. }
  59. else
  60. {
  61. WriteWarning("Database doesn't exists. Use db_install first.");
  62. return new Result(Constants.Commands.DbUpdate.ReturnCodes.DatabaseNotExists);
  63. }
  64. }
  65. catch (SqlException e)
  66. {
  67. return HandleConnectionException(e);
  68. }
  69. }
  70. return new Result(resultCode);
  71. }
  72. #endregion
  73. #region *** Private operations ***
  74. protected override void OnValidateArguments()
  75. {
  76. base.OnValidateArguments();
  77. if (ContainsArgument(Constants.Commands.DbUpdate.Arguments.List.Name))
  78. _isListOnly = GetArgumentValueOrDefault<bool>(Constants.Commands.DbUpdate.Arguments.List.Name);
  79. }
  80. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  81. {
  82. var arguments = new List<AbstractArgument>(base.OnSetupArguments());
  83. arguments.Add(new FlagArgument(Constants.Commands.DbUpdate.Arguments.List.Name,
  84. Constants.Commands.DbUpdate.Arguments.List.Description,
  85. Constants.Commands.DbUpdate.Arguments.List.Hint, false));
  86. return arguments;
  87. }
  88. #endregion
  89. }
  90. }