C# 如何通过代码在运行时添加迁移

C# 如何通过代码在运行时添加迁移,c#,model-view-controller,.net-core,C#,Model View Controller,.net Core,我在rum时代表其他Db连接的条件更改Db上下文,所以问题是,如果数据库不存在,我们无法通过代码在运行时创建数据库 public void ConfigureServices(IServiceCollection services) { services.AddDbContext<TenantsDbContext>(options => options.UseSqlServer(Configuration.Ge

我在rum时代表其他Db连接的条件更改Db上下文,所以问题是,如果数据库不存在,我们无法通过代码在运行时创建数据库

public void ConfigureServices(IServiceCollection services)
        {  
           services.AddDbContext<TenantsDbContext>(options =>              options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")))

            services.AddDbContext<MultitenantDbContext>();           

            // for dependency.
            services.AddTransient<ITenantProvider, DatabaseTenantProvider>();
             .AddEntityFrameworkStores<MultitenantDbContext>()
             .AddDefaultTokenProviders();
}
public void配置服务(IServiceCollection服务)
{  
services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”))
services.AddDbContext();
//因为依赖。
services.AddTransient();
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
}
并在运行时更改数据库连接

public MultitenantDbContext(DbContextOptions<MultitenantDbContext> options,
                                    ITenantProvider tenantProvider) : base(options)
        {
            _tenantProvider = tenantProvider;         
            _connectionString = @"Server=Test\SQL2017;Database=" + _tenantProvider.GetTenantId() + ";User ID=sa;Password=123;";
        }
public MultitenantDbContext(DbContextOptions选项,
ITenantProvider租户提供程序):基本(选项)
{
_租户提供者=租户提供者;
_connectionString=@“Server=Test\SQL2017;Database=“+\u tenantProvider.GetTenantId()+”;用户ID=sa;密码=123;
}

我想您可以只
dbContext.Migrate()
此外,您还可以使用
dbContext.encurecreated()。它将检查数据库是否存在,如果不存在,将进行迁移。

public void ConfigureServices(iSeries收集服务)
public void ConfigureServices(IServiceCollection services)
{
...
    using (var scope = sp.CreateScope())
    {
        var scopedServices = scope.ServiceProvider;
        var appDb = scopedServices.GetRequiredService<MultitenantDbContext>();

        appDb.Database.Migrate();
    }

}     
{ ... 使用(var scope=sp.CreateScope()) { var scopedServices=scope.ServiceProvider; var appDb=scopedServices.GetRequiredService(); appDb.Database.Migrate(); } }
从规范
Migrate()

请注意,此API与 DbContext.Database.Recreated()。“重新创建”不使用 迁移以创建数据库,从而创建 无法在以后使用迁移更新创建的

所以
appDb.Database.Migrate()就足够了。如果数据库不存在,它将创建数据库,并将运行每个挂起的迁移