using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; namespace BlueLaminate.EFCore.Data; public class SkinTrackerDbContextFactory : IDesignTimeDbContextFactory { public SkinTrackerDbContext CreateDbContext(string[] args) { var connectionString = BuildConfiguration().GetConnectionString("SkinTracker") ?? throw new InvalidOperationException( "Connection string 'SkinTracker' is not configured. " + "Set it via user secrets (dev) or the ConnectionStrings__SkinTracker environment variable (prod)."); var options = new DbContextOptionsBuilder() .UseNpgsql(connectionString, npgsql => npgsql.MigrationsHistoryTable("__EFMigrationsHistory", SkinTrackerDbContext.Schema)) .UseSnakeCaseNamingConvention() .Options; return new SkinTrackerDbContext(options); } public static IConfiguration BuildConfiguration() => new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: true) .AddUserSecrets(optional: true) .AddEnvironmentVariables() .Build(); }