public InitialMigrationCreator(ICmdHelper cmdHelper, DotnetEfToolManager dotnetEfToolManager) { CmdHelper = cmdHelper; DotnetEfToolManager = dotnetEfToolManager; Logger = NullLogger <InitialMigrationCreator> .Instance; }
public CreateMigrationAndRunMigratorCommand(ICmdHelper cmdHelper, InitialMigrationCreator initialMigrationCreator, DotnetEfToolManager dotnetEfToolManager) { _initialMigrationCreator = initialMigrationCreator; CmdHelper = cmdHelper; DotnetEfToolManager = dotnetEfToolManager; Logger = NullLogger <CreateMigrationAndRunMigratorCommand> .Instance; }
public virtual async Task ExecuteAsync(CommandLineArgs commandLineArgs) { if (commandLineArgs.Target.IsNullOrEmpty()) { throw new CliUsageException("DbMigrations folder path is missing!"); } var dbMigrationsFolder = commandLineArgs.Target; var nolayers = commandLineArgs.Options.ContainsKey("nolayers"); var dbMigratorProjectPath = GetDbMigratorProjectPath(dbMigrationsFolder); if (!nolayers && dbMigratorProjectPath == null) { throw new Exception("DbMigrator is not found!"); } await DotnetEfToolManager.BeSureInstalledAsync(); var migrationsCreatedSuccessfully = await _initialMigrationCreator.CreateAsync(commandLineArgs.Target, !nolayers); if (migrationsCreatedSuccessfully) { if (nolayers) { CmdHelper.RunCmd("dotnet run --migrate-database", Path.GetDirectoryName(Path.Combine(dbMigrationsFolder, "MyCompanyName.MyProjectName"))); } else { CmdHelper.RunCmd("dotnet run", Path.GetDirectoryName(dbMigratorProjectPath)); } await Task.CompletedTask; } else { var exceptionMsg = "Migrations failed! A migration command didn't run successfully."; Logger.LogError(exceptionMsg); throw new Exception(exceptionMsg); } }
public async Task <bool> CreateAsync(string targetProjectFolder, bool layeredTemplate = true) { if (targetProjectFolder == null || !Directory.Exists(targetProjectFolder)) { Logger.LogError($"This path doesn't exist: {targetProjectFolder}"); return(false); } Logger.LogInformation("Creating initial migrations..."); await DotnetEfToolManager.BeSureInstalledAsync(); var tenantDbContextName = FindTenantDbContextName(targetProjectFolder); var dbContextName = tenantDbContextName != null? FindDbContextName(targetProjectFolder) : null; var migrationOutput = AddMigrationAndGetOutput(targetProjectFolder, dbContextName, "Migrations"); var tenantMigrationOutput = tenantDbContextName != null? AddMigrationAndGetOutput(targetProjectFolder, tenantDbContextName, "TenantMigrations") : null; var migrationSuccess = CheckMigrationOutput(migrationOutput) && CheckMigrationOutput(tenantMigrationOutput); if (migrationSuccess) { Logger.LogInformation("Initial migrations are created."); } else { Logger.LogError("Creating initial migrations process is failed! Details:" + Environment.NewLine + migrationOutput + Environment.NewLine + tenantMigrationOutput + Environment.NewLine); } return(migrationSuccess); }