22
schangxiang@126.com
2025-05-20 6768c18458bed22ae0ef1d611afd80bdeea31dda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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;
            }
        }
    }
}