Fix dotnet ef design time context

This commit is contained in:
Zoe Roux 2024-04-01 23:41:45 +02:00
parent f64cf161ab
commit de2308f319
No known key found for this signature in database
3 changed files with 27 additions and 8 deletions

View File

@ -1,2 +1,2 @@
--project --project
src/Kyoo.Core src/Kyoo.Postgresql

View File

@ -28,7 +28,9 @@ using Kyoo.Postgresql.Utils;
using Kyoo.Utils; using Kyoo.Utils;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions; using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
using Microsoft.Extensions.Configuration;
using Npgsql; using Npgsql;
namespace Kyoo.Postgresql; namespace Kyoo.Postgresql;
@ -121,3 +123,15 @@ public class PostgresContext(DbContextOptions options, IHttpContextAccessor acce
}; };
} }
} }
public class PostgresContextBuilder : IDesignTimeDbContextFactory<PostgresContext>
{
public PostgresContext CreateDbContext(string[] args)
{
NpgsqlDataSource dataSource = PostgresModule.CreateDataSource(new ConfigurationManager());
DbContextOptionsBuilder builder = new();
builder.UseNpgsql(dataSource);
return new PostgresContext(builder.Options, null!);
}
}

View File

@ -30,16 +30,16 @@ namespace Kyoo.Postgresql;
public static class PostgresModule public static class PostgresModule
{ {
public static void ConfigurePostgres(this WebApplicationBuilder builder) public static NpgsqlDataSource CreateDataSource(IConfiguration configuration)
{ {
DbConnectionStringBuilder conBuilder = DbConnectionStringBuilder conBuilder =
new() new()
{ {
["USER ID"] = builder.Configuration.GetValue("POSTGRES_USER", "KyooUser"), ["USER ID"] = configuration.GetValue("POSTGRES_USER", "KyooUser"),
["PASSWORD"] = builder.Configuration.GetValue("POSTGRES_PASSWORD", "KyooPassword"), ["PASSWORD"] = configuration.GetValue("POSTGRES_PASSWORD", "KyooPassword"),
["SERVER"] = builder.Configuration.GetValue("POSTGRES_SERVER", "db"), ["SERVER"] = configuration.GetValue("POSTGRES_SERVER", "db"),
["PORT"] = builder.Configuration.GetValue("POSTGRES_PORT", "5432"), ["PORT"] = configuration.GetValue("POSTGRES_PORT", "5432"),
["DATABASE"] = builder.Configuration.GetValue("POSTGRES_DB", "kyooDB"), ["DATABASE"] = configuration.GetValue("POSTGRES_DB", "kyooDB"),
["POOLING"] = "true", ["POOLING"] = "true",
["MAXPOOLSIZE"] = "95", ["MAXPOOLSIZE"] = "95",
["TIMEOUT"] = "30" ["TIMEOUT"] = "30"
@ -49,7 +49,12 @@ public static class PostgresModule
dsBuilder.MapEnum<Status>(); dsBuilder.MapEnum<Status>();
dsBuilder.MapEnum<Genre>(); dsBuilder.MapEnum<Genre>();
dsBuilder.MapEnum<WatchStatus>(); dsBuilder.MapEnum<WatchStatus>();
NpgsqlDataSource dataSource = dsBuilder.Build(); return dsBuilder.Build();
}
public static void ConfigurePostgres(this WebApplicationBuilder builder)
{
NpgsqlDataSource dataSource = CreateDataSource(builder.Configuration);
builder.Services.AddDbContext<DatabaseContext, PostgresContext>( builder.Services.AddDbContext<DatabaseContext, PostgresContext>(
x => x =>