使用aspnetboilerplate的EF核心迁移在哪里触发context.Database.Migrate();

问题描述 投票:2回答:2

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

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

context.Database.Migrate();

由于这是对基础架构逻辑(实体框架核心)的调用,因此应该远离域服务和应用程序服务。

提前致谢

aspnetboilerplate
2个回答
1
投票

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

 public class MyApplicationEntityFrameworkCoreModule : AbpModule
    {

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

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

0
投票

我终于找到了一个工作解决方案,用于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);
        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.