using back.Options; using back.persistance.data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; namespace back.ServicesExtensions; public static partial class ServicesExtensions { private static IServiceCollection AddDatabaseContext(this IServiceCollection services) { services.AddContext(); return services; } private static IServiceCollection AddContext(this IServiceCollection services) where T : DbContext { var config = services .BuildServiceProvider() .GetRequiredService>() .Get(DatabaseConfig.DataStorage); services.AddDbContext(options => { options.UseDatabaseConfig(config); }); using var scope = services.BuildServiceProvider().CreateScope(); var context = scope.ServiceProvider .GetRequiredService(); var isDevelopment = scope.ServiceProvider .GetRequiredService() .IsDevelopment(); if (isDevelopment && !context.Database.HasPendingModelChanges()) { context.Database.EnsureCreated(); } else { context.Database.EnsureCreated(); context.Database.Migrate(); } context.SaveChanges(); return services; } }