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;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
namespace MyCompanyName.MyProjectName.Data namespace MyCompanyName.MyProjectName.Data
{ {
@ -12,13 +16,19 @@ namespace MyCompanyName.MyProjectName.Data
private readonly IDataSeeder _dataSeeder; private readonly IDataSeeder _dataSeeder;
private readonly IMyProjectNameDbSchemaMigrator _dbSchemaMigrator; private readonly IMyProjectNameDbSchemaMigrator _dbSchemaMigrator;
private readonly ITenantRepository _tenantRepository;
private readonly ICurrentTenant _currentTenant;
public MyProjectNameDbMigrationService( public MyProjectNameDbMigrationService(
IDataSeeder dataSeeder, IDataSeeder dataSeeder,
IMyProjectNameDbSchemaMigrator dbSchemaMigrator) IMyProjectNameDbSchemaMigrator dbSchemaMigrator,
ITenantRepository tenantRepository,
ICurrentTenant currentTenant)
{ {
_dataSeeder = dataSeeder; _dataSeeder = dataSeeder;
_dbSchemaMigrator = dbSchemaMigrator; _dbSchemaMigrator = dbSchemaMigrator;
_tenantRepository = tenantRepository;
_currentTenant = currentTenant;
Logger = NullLogger<MyProjectNameDbMigrationService>.Instance; Logger = NullLogger<MyProjectNameDbMigrationService>.Instance;
} }
@ -27,13 +37,36 @@ namespace MyCompanyName.MyProjectName.Data
{ {
Logger.LogInformation("Started database migrations..."); 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(); await _dbSchemaMigrator.MigrateAsync();
Logger.LogInformation("Executing database seed..."); Logger.LogInformation("Executing host database seed...");
await _dataSeeder.SeedAsync(); 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.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MyCompanyName.MyProjectName.Data; using MyCompanyName.MyProjectName.Data;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -10,15 +12,21 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
: IMyProjectNameDbSchemaMigrator, ITransientDependency : IMyProjectNameDbSchemaMigrator, ITransientDependency
{ {
private readonly MyProjectNameMigrationsDbContext _dbContext; private readonly MyProjectNameMigrationsDbContext _dbContext;
private readonly IServiceProvider _serviceProvider;
public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(MyProjectNameMigrationsDbContext dbContext) public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(
IServiceProvider serviceProvider
)
{ {
_dbContext = dbContext; _serviceProvider = serviceProvider;
} }
public async Task MigrateAsync() public async Task MigrateAsync()
{ {
await _dbContext.Database.MigrateAsync(); await _serviceProvider
.GetRequiredService<MyProjectNameMigrationsDbContext>()
.Database
.MigrateAsync();
} }
} }
} }
Loading…
Cancel
Save