51 lines
1.3 KiB
C#
51 lines
1.3 KiB
C#
namespace MyOffice.DbContext;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
public static class DbContextServiceCollectionExtensions
|
|
{
|
|
public static IServiceCollection AddAppDbContext(
|
|
this IServiceCollection services,
|
|
ConnectionConfiguration connection
|
|
)
|
|
{
|
|
services.AddSingleton(connection);
|
|
|
|
services.AddDbContext<AppDbContext>((_, options) =>
|
|
{
|
|
ConfigureDbContextOptions(options, connection);
|
|
});
|
|
|
|
return services;
|
|
}
|
|
|
|
public static void ConfigureDbContextOptions(
|
|
DbContextOptionsBuilder options,
|
|
ConnectionConfiguration connection
|
|
)
|
|
{
|
|
if (!Enum.TryParse<AppDbContextProvidersEnum>(connection.Provider, ignoreCase: true, out var provider))
|
|
throw new InvalidOperationException($"No such provider: [{connection.Provider}]");
|
|
|
|
switch (provider)
|
|
{
|
|
case AppDbContextProvidersEnum.npgsql:
|
|
options.UseNpgsql(connection.ConnectionString, x =>
|
|
x.MigrationsAssembly("MyOffice.Migrations.Postgres"));
|
|
break;
|
|
case AppDbContextProvidersEnum.sqlite:
|
|
options.UseSqlite(connection.ConnectionString, x =>
|
|
x.MigrationsAssembly("MyOffice.Migrations.Sqlite"));
|
|
break;
|
|
default:
|
|
throw new NotSupportedException($"No such provider: [{connection.Provider}]");
|
|
}
|
|
|
|
#if DEBUG
|
|
options.EnableSensitiveDataLogging();
|
|
options.EnableDetailedErrors();
|
|
#endif
|
|
}
|
|
}
|