Automatically run the DbMigrator application on the add-module command

resolves https://github.com/abpframework/abp/issues/4863
pull/5049/head
Yunus Emre Kalkan 5 years ago
parent 31fcfbb4ff
commit 598b682a14

@ -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)

@ -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");
}
}

Loading…
Cancel
Save