使用 aspnetboilerplate 的 EF Core 迁移触发位置 context.Database.Migrate();

EF Core Migration with aspnetboilerplate Where to trigger context.Database.Migrate();

我需要确保我的应用程序本身能够升级他的数据库模型(应用迁移)

在ABP架构中,Migrate应该在哪里调用?

context.Database.Migrate();

因为这是对基础结构逻辑(Entity framework 核心)的调用,所以它应该远离域服务和应用程序服务。

提前致谢

您好,您可以在 EntityFrameworkCoreModule 的 PostInitialize 方法中执行数据库迁移。

 public class MyApplicationEntityFrameworkCoreModule : AbpModule
    {

        public override void PostInitialize()
        {
            if (!SkipDbSeed)
            {
                SeedHelper.SeedHostDb(IocManager);
            }

            // --> You can execute migrations here <--
        }
    }

我终于找到了适用于 abp 4.3 的可行解决方案 此代码允许您的应用程序在启动时应用迁移。

public override void PostInitialize()
{
    var dbContextProvider = IocManager.Resolve<IDbContextProvider<ExtranetDbContext>>();
    var unitOfWorkManager = IocManager.Resolve<IUnitOfWorkManager>();

    using (var unitOfWork = unitOfWorkManager.Begin())
    {
        var context = dbContextProvider.GetDbContext(MultiTenancySides.Host);
        
        //Removes actual connection as it has been enlisted in a non needed transaction for migration
        context.Database.CloseConnection();
        context.Database.Migrate();
    }

    if (!SkipDbSeed)
    {
        SeedHelper.SeedHostDb(IocManager);
    }
}

有关 IUnitOfWorkManager 的详细信息,请参见 here