Files
Aberwyn/Aberwyn/Data/ApplicationDbContextFactory.cs
Elias Jansson ca2a5d36e2 Another attempt
2026-01-24 16:52:53 +01:00

64 lines
2.2 KiB
C#

using Aberwyn.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Text.Json;
using static Aberwyn.Data.SetupService;
namespace Aberwyn.Data
{
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
var setup = LoadSetup();
var csBuilder = new MySqlConnector.MySqlConnectionStringBuilder
{
Server = setup.DbHost,
Port = (uint)setup.DbPort,
Database = setup.DbName,
UserID = setup.DbUser,
Password = setup.DbPassword,
AllowUserVariables = true
};
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseMySql(csBuilder.ConnectionString, new MySqlServerVersion(new Version(8, 0, 36)));
return new ApplicationDbContext(optionsBuilder.Options);
}
public static ApplicationDbContext CreateWithConfig(IHostEnvironment env, bool useProdDb = false)
{
var setup = SetupLoader.Load(env);
var connStr = SetupLoader.GetConnectionString(setup);
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseMySql(connStr, new MySqlServerVersion(new Version(8, 0, 36)));
return new ApplicationDbContext(optionsBuilder.Options);
}
private static SetupSettings LoadSetup()
{
var basePath = Directory.GetCurrentDirectory();
var setupPath = Path.Combine(basePath, "infrastructure", "setup.json");
if (!File.Exists(setupPath))
throw new FileNotFoundException("setup.json saknas i infrastructure-mappen.");
var json = File.ReadAllText(setupPath);
var setup = JsonSerializer.Deserialize<SetupSettings>(json);
if (setup == null || !setup.IsConfigured)
throw new InvalidOperationException("setup.json är inte korrekt konfigurerad.");
return setup;
}
}
}