Browse Source

Updated MigrationService with tenant migrations.

pull/2808/head
Galip Tolga Erdem 7 years ago
parent
commit
e7fd5014f9
  1. 43
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs
  2. 16
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs

43
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs

@ -1,8 +1,12 @@
using System.Threading.Tasks;
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
namespace MyCompanyName.MyProjectName.Data
{
@ -12,13 +16,19 @@ namespace MyCompanyName.MyProjectName.Data
private readonly IDataSeeder _dataSeeder;
private readonly IMyProjectNameDbSchemaMigrator _dbSchemaMigrator;
private readonly ITenantRepository _tenantRepository;
private readonly ICurrentTenant _currentTenant;
public MyProjectNameDbMigrationService(
IDataSeeder dataSeeder,
IMyProjectNameDbSchemaMigrator dbSchemaMigrator)
IMyProjectNameDbSchemaMigrator dbSchemaMigrator,
ITenantRepository tenantRepository,
ICurrentTenant currentTenant)
{
_dataSeeder = dataSeeder;
_dbSchemaMigrator = dbSchemaMigrator;
_tenantRepository = tenantRepository;
_currentTenant = currentTenant;
Logger = NullLogger<MyProjectNameDbMigrationService>.Instance;
}
@ -27,13 +37,36 @@ namespace MyCompanyName.MyProjectName.Data
{
Logger.LogInformation("Started database migrations...");
Logger.LogInformation("Migrating database schema...");
await MigrateHostDatabaseAsync();
foreach (var tenant in await _tenantRepository.GetListAsync())
{
using (_currentTenant.Change(tenant.Id))
{
await MigrateTenantDatabasesAsync(tenant);
}
}
Logger.LogInformation("Successfully completed database migrations.");
}
private async Task MigrateHostDatabaseAsync()
{
Logger.LogInformation("Migrating host database schema...");
await _dbSchemaMigrator.MigrateAsync();
Logger.LogInformation("Executing database seed...");
Logger.LogInformation("Executing host database seed...");
await _dataSeeder.SeedAsync();
Logger.LogInformation("Successfully completed database migrations.");
Logger.LogInformation("Successfully completed host database migrations.");
}
private async Task MigrateTenantDatabasesAsync(Tenant tenant)
{
Logger.LogInformation($"Migrating {tenant.Name} database schema...");
await _dbSchemaMigrator.MigrateAsync();
Logger.LogInformation($"Executing {tenant.Name} database seed...");
await _dataSeeder.SeedAsync(tenant.Id);
Logger.LogInformation($"Successfully completed {tenant.Name} database migrations.");
}
}
}

16
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs

@ -1,5 +1,7 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MyCompanyName.MyProjectName.Data;
using Volo.Abp.DependencyInjection;
@ -10,15 +12,21 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
: IMyProjectNameDbSchemaMigrator, ITransientDependency
{
private readonly MyProjectNameMigrationsDbContext _dbContext;
private readonly IServiceProvider _serviceProvider;
public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(MyProjectNameMigrationsDbContext dbContext)
public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(
IServiceProvider serviceProvider
)
{
_dbContext = dbContext;
_serviceProvider = serviceProvider;
}
public async Task MigrateAsync()
{
await _dbContext.Database.MigrateAsync();
await _serviceProvider
.GetRequiredService<MyProjectNameMigrationsDbContext>()
.Database
.MigrateAsync();
}
}
}
Loading…
Cancel
Save