Files
Trent 89da4d094f
CI / frontend (push) Canceled after 0s
CI / backend (push) Canceled after 6s
fix AppDbContext migrate issue
2026-08-12 01:12:13 +08:00

40 lines
1.6 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
/// <summary>
/// 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.
/// </summary>
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
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";
}
}