diff options
Diffstat (limited to 'src/Enmarcha.Experimental.ServiceViewer/AppDbContextDesignTimeFactory.cs')
| -rw-r--r-- | src/Enmarcha.Experimental.ServiceViewer/AppDbContextDesignTimeFactory.cs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Enmarcha.Experimental.ServiceViewer/AppDbContextDesignTimeFactory.cs b/src/Enmarcha.Experimental.ServiceViewer/AppDbContextDesignTimeFactory.cs new file mode 100644 index 0000000..4dcd320 --- /dev/null +++ b/src/Enmarcha.Experimental.ServiceViewer/AppDbContextDesignTimeFactory.cs @@ -0,0 +1,41 @@ +using Enmarcha.Experimental.ServiceViewer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; + +namespace Enmarcha.Experimental.ServiceViewer; + +public class AppDbContextDesignTimeFactory : IDesignTimeDbContextFactory<AppDbContext> +{ + public AppDbContext CreateDbContext(string[] args) + { + IConfigurationRoot configuration = new ConfigurationBuilder() + .AddJsonFile("appsettings.json", optional: true) + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", + optional: true) + .AddUserSecrets(typeof(AppDbContext).Assembly, optional: true) + .AddEnvironmentVariables() + .Build(); + + var builder = new DbContextOptionsBuilder<AppDbContext>(); + var connectionString = configuration.GetConnectionString("Database"); + if (string.IsNullOrEmpty(connectionString)) + { + throw new InvalidOperationException("Connection string 'Database' not found."); + } + + var loggerFactory = LoggerFactory.Create(lb => + { + lb + .AddConsole() + .SetMinimumLevel(LogLevel.Information); + }); + builder.UseLoggerFactory(loggerFactory); + + builder.UseNpgsql( + connectionString, + options => options.UseNetTopologySuite() + ); + + return new AppDbContext(builder.Options); + } +} |
