From 598b682a1449bb063b5a65098780ef45869568e3 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 13 Aug 2020 14:09:23 +0300 Subject: [PATCH] Automatically run the DbMigrator application on the add-module command resolves https://github.com/abpframework/abp/issues/4863 --- .../EfCoreMigrationAdder.cs | 14 ++------- .../SolutionModuleAdder.cs | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs index b125c55648..280d4b8f34 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs @@ -7,22 +7,12 @@ namespace Volo.Abp.Cli.ProjectModification { public class EfCoreMigrationAdder : ITransientDependency { - public void AddMigration(string csprojFile, string module, string startupProject, bool updateDatabase = true) + public void AddMigration(string dbMigrationsCsprojFile, string module, string startupProject) { var moduleName = ParseModuleName(module); var migrationName = "Added_" + moduleName + "_Module" + GetUniquePostFix(); - CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" && dotnet ef migrations add " + migrationName + GetStartupProjectOption(startupProject)); - - if (updateDatabase) - { - UpdateDatabase(csprojFile, startupProject); - } - } - - protected void UpdateDatabase(string csprojFile, string startupProject) - { - CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" && dotnet ef database update" + GetStartupProjectOption(startupProject)); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigrationsCsprojFile) + "\" && dotnet ef migrations add " + migrationName + GetStartupProjectOption(startupProject)); } protected virtual string ParseModuleName(string fullModuleName) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index a19af6f52c..1b006c25b6 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding; +using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; using Volo.Abp.Json; @@ -214,6 +215,11 @@ namespace Volo.Abp.Cli.ProjectModification { if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName)) { + if (!skipDbMigrations) + { + RunMigrator(projectFiles); + } + return; } @@ -227,6 +233,12 @@ namespace Volo.Abp.Cli.ProjectModification if (dbMigrationsProject == null) { Logger.LogDebug("Solution doesn't have a \".DbMigrations\" project."); + + if (!skipDbMigrations) + { + RunMigrator(projectFiles); + } + return; } @@ -240,9 +252,24 @@ namespace Volo.Abp.Cli.ProjectModification var addedNewBuilder = DbContextFileBuilderConfigureAdder.Add(dbContextFile, module.EfCoreConfigureMethodName); - if (addedNewBuilder && !skipDbMigrations) + if (!skipDbMigrations) + { + if (addedNewBuilder) + { + EfCoreMigrationAdder.AddMigration(dbMigrationsProject, module.Name, startupProject); + } + + RunMigrator(projectFiles); + } + } + + protected virtual async Task RunMigrator(string[] projectFiles) + { + var dbMigratorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".DbMigrator.csproj")); + + if (!string.IsNullOrEmpty(dbMigratorProject)) { - EfCoreMigrationAdder.AddMigration(dbMigrationsProject, module.Name, startupProject); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigratorProject) + "\" && dotnet run"); } }