46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Design;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Pgvector.EntityFrameworkCore;
|
|
|
|
namespace NexusReader.Infrastructure.Persistence;
|
|
|
|
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
|
|
{
|
|
public AppDbContext CreateDbContext(string[] args)
|
|
{
|
|
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development";
|
|
|
|
// Try to find the Web project directory by looking for the solution root
|
|
var currentDir = new DirectoryInfo(Directory.GetCurrentDirectory());
|
|
while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, "NexusReader.slnx")))
|
|
{
|
|
currentDir = currentDir.Parent;
|
|
}
|
|
|
|
var basePath = currentDir != null
|
|
? Path.Combine(currentDir.FullName, "src", "NexusReader.Web.New")
|
|
: Directory.GetCurrentDirectory();
|
|
|
|
var configuration = new ConfigurationBuilder()
|
|
.SetBasePath(basePath)
|
|
.AddJsonFile("appsettings.json", optional: true)
|
|
.AddJsonFile($"appsettings.{environment}.json", optional: true)
|
|
.AddEnvironmentVariables()
|
|
.Build();
|
|
|
|
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
|
|
var connectionString = configuration.GetConnectionString("PostgresConnection");
|
|
|
|
if (string.IsNullOrEmpty(connectionString))
|
|
{
|
|
// For design time, if no PG connection is found, we might be using Sqlite or just testing
|
|
connectionString = "Host=localhost;Database=nexus_reader;Username=postgres;Password=postgres";
|
|
}
|
|
|
|
optionsBuilder.UseNpgsql(connectionString, x => x.UseVector());
|
|
|
|
return new AppDbContext(optionsBuilder.Options);
|
|
}
|
|
}
|