namespace MyOffice.DbContext; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; public class AppDbContextFactory : IDesignTimeDbContextFactory { public static AppDbContextFactory Instance = new(); public AppDbContext CreateDbContext() { return CreateDbContext(null); } public AppDbContext CreateDbContext(string[]? args) { var connection = RepositoryInitializer.ConnectionString; var builder = new DbContextOptionsBuilder(); var provider = connection?.Provider ?? args?[0] ?? ""; var connectionString = connection?.ConnectionString ?? args?[1] ?? ""; if (!Enum.TryParse(provider, out var providerEnum)) throw new InvalidOperationException($"No such provider: [{provider}]"); switch (providerEnum) { case AppDbContextProvidersEnum.npgsql: builder.UseNpgsql(connectionString, x => x.MigrationsAssembly("MyOffice.Migrations.Postgres")); break; case AppDbContextProvidersEnum.sqlite: builder.UseSqlite(connectionString, x => x.MigrationsAssembly("MyOffice.Migrations.Sqlite")); break; default: throw new NotSupportedException($"No such provider: [{provider}]"); } var db = new AppDbContext(providerEnum, builder.Options); db.ChangeTracker.AutoDetectChangesEnabled = false; db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; return db; } }