DbUninstallCmd.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Microsoft.Data.SqlClient;
  2. using Microsoft.EntityFrameworkCore;
  3. using Quadarax.Application.QLiberace.Base;
  4. using Quadarax.Application.QLiberace.Console.Commands.Base;
  5. using Quadarax.Foundation.Core.Data.Interface.Domain;
  6. using Quadarax.Foundation.Core.QConsole;
  7. using Quadarax.Foundation.Core.QConsole.Attributes;
  8. using Quadarax.Foundation.Core.Value;
  9. using static Quadarax.Application.QLiberace.Console.Constants.Commands;
  10. namespace Quadarax.Application.QLiberace.Console.Commands
  11. {
  12. [CommandDefinition]
  13. internal class DbUninstallCmd: DbContextCommand
  14. {
  15. #region *** Properties ***
  16. public override string Name => DbUninstall.Name;
  17. public override string Description => DbUninstall.Description;
  18. #endregion
  19. #region *** Fields ***
  20. #endregion
  21. #region *** Constructor ***
  22. public DbUninstallCmd(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. WriteInfo("Deleting database...");
  39. context.Database.EnsureDeleted();
  40. }
  41. else
  42. {
  43. resultCode = DbUninstall.ReturnCodes.DatabaseNotExists;
  44. WriteWarning("Database not exists.");
  45. }
  46. }
  47. catch (SqlException e)
  48. {
  49. return HandleConnectionException(e);
  50. }
  51. }
  52. return new Result(resultCode);
  53. }
  54. #endregion
  55. #region *** Private operations ***
  56. #endregion
  57. }
  58. }