EF核心单一部署;多个数据库;迁移

时间:2019-06-03 20:15:46

标签: c# sql-server entity-framework-core

我目前有一个.net核心Web api,每个客户端都有一个SQL Server数据库。每次调用都需要传递一个api密钥,然后在主租户数据库中进行查找以获取正确的连接字符串。然后api将在启动文件中设置连接字符串并运行调用。

在api中,我有一个端点,可以将所有租户更新到最新的迁移,并且我还有一个控制台应用程序,可以执行相同的操作。像这样:

public async Task UpdateAllDatabases()
    {
        var qry = await GetAll(null, true);
        foreach (var i in qry)
        {
            var optionsBuilder = new DbContextOptionsBuilder<MigrationContext>().UseSqlServer(i.DatabaseConnectionString);
            using (var tenantContext = new MigrationContext(optionsBuilder.Options, _appSettings))
            {
                tenantContext.Database.Migrate();
            }
        }
    }

我遇到的问题是何时需要remove-migration。如何从所有租户数据库中删除迁移?

1 个答案:

答案 0 :(得分:1)

您可以使用相同的Migrate方法,但参数为“ targetMigration”。

这会将所有数据库升级或回滚到指定的目标迁移。

public void Migrate (string targetMigration = null);

https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.migrations.imigrator.migrate

更新:添加了示例

MigrationContext.cs

public class MigrationContext : DbContext
{
}

执行迁移

using (var tenantContext = new MigrationContext())
{
    tenantContext.Database.GetService<IMigrator>().Migrate("targetMigration");
}

.csproj文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
  </ItemGroup>

</Project>