EF-Core Single Deployment;Несколько баз данных;Миграции - PullRequest
0 голосов
/ 03 июня 2019

В настоящее время у меня есть веб-API ядра .net, который имеет базу данных 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 Ответ

1 голос
/ 03 июня 2019

Вы можете использовать тот же метод миграции, но с параметром 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 file

<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>
...