users/src/Nocr.Users.Migrator/DesignTimeTextMatcherContextFactory.cs
2024-03-30 11:48:50 +03:00

37 lines
1.5 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using Nocr.Users.Persistence;
namespace Nocr.Users.Migrator;
public class DesignTimeTextMatcherContextFactory : IDesignTimeDbContextFactory<UsersContext>
{
private const string EnvironmentVariableKey = "DOTNET_ENVIRONMENT";
public UsersContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<UsersContext>();
var configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var environment = configuration.GetValue<string>(EnvironmentVariableKey);
if (string.IsNullOrWhiteSpace(environment))
{
throw new InvalidOperationException($"Отсутствует переменная окружения {EnvironmentVariableKey}");
}
var connectionString = configuration.GetConnectionString(environment);
if (string.IsNullOrWhiteSpace(connectionString))
throw new InvalidOperationException($"ConnectionString for environment `{environment}` not found");
optionsBuilder.UseMySql(connectionString, new MariaDbServerVersion(MariaDbServerVersion.LatestSupportedServerVersion),
builder => builder.MigrationsAssembly("Nocr.Users.Migrator"));
return new UsersContext(optionsBuilder.Options);
}
}