我目前有一个.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
。如何从所有租户数据库中删除迁移?
答案 0 :(得分:1)
您可以使用相同的Migrate方法,但参数为“ targetMigration”。
这会将所有数据库升级或回滚到指定的目标迁移。
public void Migrate (string targetMigration = null);
更新:添加了示例
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>