DbUpdateCmd.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Microsoft.Data.SqlClient;
  2. using Quadarax.Application.QLiberace.Base;
  3. using Quadarax.Application.QLiberace.Console.Commands.Base;
  4. using Quadarax.Foundation.Core.QConsole.Argument;
  5. using Quadarax.Foundation.Core.QConsole;
  6. using Quadarax.Foundation.Core.Value;
  7. using Microsoft.EntityFrameworkCore;
  8. using Quadarax.Foundation.Core.QConsole.Attributes;
  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(QlbrcDbContext context)
  28. {
  29. WriteInfo("Connecting database...");
  30. var resultCode = 0;
  31. try
  32. {
  33. if (context.Database.CanConnect())
  34. {
  35. if (_isListOnly)
  36. {
  37. WriteInfo("Pending migrations list:");
  38. var migrations = context.Database.GetPendingMigrations().ToArray();
  39. if (migrations.Length > 0)
  40. {
  41. foreach (var mig in migrations)
  42. WriteInfo(mig);
  43. }
  44. else
  45. {
  46. WriteInfo("No pending migrations present.");
  47. }
  48. WriteWarning("No migration applied.");
  49. }
  50. else
  51. {
  52. ApplyMigration(context);
  53. WriteWarning("Migration applied.");
  54. }
  55. }
  56. else
  57. {
  58. WriteWarning("Database doesn't exists. Use db_install first.");
  59. return new Result(Constants.Commands.DbUpdate.ReturnCodes.DatabaseNotExists);
  60. }
  61. }
  62. catch (SqlException e)
  63. {
  64. return HandleConnectionException(e);
  65. }
  66. return new Result(resultCode);
  67. }
  68. #endregion
  69. #region *** Private operations ***
  70. protected override void OnValidateArguments()
  71. {
  72. base.OnValidateArguments();
  73. if (ContainsArgument(Constants.Commands.DbUpdate.Arguments.List.Name))
  74. _isListOnly = GetArgumentValueOrDefault<bool>(Constants.Commands.DbUpdate.Arguments.List.Name);
  75. }
  76. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  77. {
  78. var arguments = new List<AbstractArgument>(base.OnSetupArguments());
  79. arguments.Add(new FlagArgument(Constants.Commands.DbUpdate.Arguments.List.Name,
  80. Constants.Commands.DbUpdate.Arguments.List.Description,
  81. Constants.Commands.DbUpdate.Arguments.List.Hint, false));
  82. return arguments;
  83. }
  84. #endregion
  85. }
  86. }