using CMS.Plugin.HIAWms.Domain.Data;
|
using CMS.Project.Abstractions;
|
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.Logging;
|
using Volo.Abp.DependencyInjection;
|
|
namespace CMS.Plugin.HIAWms
|
{
|
/// <summary>
|
/// 工程数据库迁移器,当<see cref="IProjectRunner"/>加载工程时此对象会被创建调用
|
/// </summary>
|
public class CMSPluginRuntimeMigrator : IProjectRuntimeMigrator
|
{
|
/// <summary>
|
/// 执行迁移
|
/// </summary>
|
/// <param name="project">当前要运行的工程</param>
|
/// <param name="serviceProvider">存在运行工程上下文的serviceProvider</param>
|
/// <returns></returns>
|
public async Task UpgradeAsync(Project.Project project, IServiceProvider serviceProvider)
|
{
|
var objectAccessor = serviceProvider.GetService<ObjectAccessor<Project.Project>>();
|
if (objectAccessor != null)
|
{
|
objectAccessor.Value = project;
|
}
|
|
var logger = serviceProvider.GetRequiredService<ILogger<CMSPluginRuntimeMigrator>>();
|
try
|
{
|
// 通过serviceProvider获取自己的DbContext并进行创建或迁移流程
|
logger.LogInformation($"Start {project.Info.Id} HIAWms dbcontext create");
|
await serviceProvider.GetRequiredService<CMSPluginDbMigrationService>().MigrateAsync();
|
}
|
catch (Exception ex)
|
{
|
logger.LogError(ex, "Create HIAWms db failed");
|
}
|
|
if (objectAccessor != null)
|
{
|
objectAccessor.Value = null;
|
}
|
}
|
}
|
}
|