using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; /// /// Design-time factory for EF tools and the CD migrations bundle. /// Without this, the bundle tries to bootstrap Program.cs (JWT/MinIO/etc.) and fails /// when those settings are absent next to ./migrate-api; --connection then never applies. /// public class AppDbContextFactory : IDesignTimeDbContextFactory { public AppDbContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseNpgsql(ResolveConnectionString()); return new AppDbContext(optionsBuilder.Options); } private static string ResolveConnectionString() { var fromEnv = Environment.GetEnvironmentVariable("ConnectionStrings__DefaultConnection"); if (!string.IsNullOrWhiteSpace(fromEnv)) return fromEnv; var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true) .AddJsonFile("appsettings.Development.json", optional: true) .AddEnvironmentVariables() .Build(); var fromConfig = config.GetConnectionString("DefaultConnection"); if (!string.IsNullOrWhiteSpace(fromConfig)) return fromConfig; // Placeholder so the factory can construct a context; migrate-api --connection // replaces this when applying migrations in CD. return "Host=127.0.0.1;Database=ef_design;Username=ef;Password=ef"; } }