You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.6 KiB
43 lines
1.6 KiB
using Bit.Core.Settings; |
|
using Bit.Infrastructure.EntityFramework.Repositories; |
|
using Microsoft.EntityFrameworkCore; |
|
using Microsoft.EntityFrameworkCore.Design; |
|
using Microsoft.Extensions.Configuration; |
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
namespace Bit.PostgresMigrations; |
|
|
|
public static class GlobalSettingsFactory |
|
{ |
|
public static GlobalSettings GlobalSettings { get; } = new GlobalSettings(); |
|
static GlobalSettingsFactory() |
|
{ |
|
// UserSecretsId here should match what is in Api.csproj |
|
var configBuilder = new ConfigurationBuilder().AddUserSecrets("bitwarden-Api"); |
|
var Configuration = configBuilder.Build(); |
|
ConfigurationBinder.Bind(Configuration.GetSection("GlobalSettings"), GlobalSettings); |
|
} |
|
} |
|
|
|
public class DatabaseContextFactory : IDesignTimeDbContextFactory<DatabaseContext> |
|
{ |
|
public DatabaseContext CreateDbContext(string[] args) |
|
{ |
|
var services = new ServiceCollection(); |
|
services.AddDataProtection(); |
|
var serviceProvider = services.BuildServiceProvider(); |
|
|
|
var globalSettings = GlobalSettingsFactory.GlobalSettings; |
|
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>(); |
|
var connectionString = globalSettings.PostgreSql?.ConnectionString; |
|
if (string.IsNullOrWhiteSpace(connectionString)) |
|
{ |
|
throw new Exception("No Postgres connection string found."); |
|
} |
|
optionsBuilder.UseNpgsql( |
|
connectionString, |
|
b => b.MigrationsAssembly("PostgresMigrations")) |
|
.UseApplicationServiceProvider(serviceProvider); |
|
return new DatabaseContext(optionsBuilder.Options); |
|
} |
|
}
|
|
|