using CMS.Plugin.HIAWms.Domain.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore;
///
public class CMSPluginDbSchemaMigrator : ICMSPluginDbSchemaMigrator, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly ILogger _logger;
///
/// Initializes a new instance of the class.
///
/// The service provider.
public CMSPluginDbSchemaMigrator(IServiceProvider serviceProvider, ILogger logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
}
///
public async Task MigrateAsync()
{
/* We intentionally resolving the CMSDbContext
* from IServiceProvider (instead of directly injecting it)
* to properly get the connection string of the current tenant in the
* current scope.
*/
var database = _serviceProvider.GetRequiredService().Database;
_logger.LogInformation($"Start database {database.GetDbConnection().Database} migrate");
await database.MigrateAsync();
}
}