namespace Yes.Infrastructure.Data.DbContexts { public class BlogDbContext : DbContext { private readonly string _connectionString; private readonly DatabaseTypeEnum _databaseType; private readonly string _databaseVersion; public BlogDbContext(IConnectionStringProvider connectionStringProvider) { _connectionString = connectionStringProvider.GetConnectionString(); _databaseType = connectionStringProvider.GetDatabaseType(); _databaseVersion = connectionStringProvider.GetDatabaseVersion(); } protected override void OnConfiguring(DbContextOptionsBuilder builder) { _ = _databaseType switch { DatabaseTypeEnum.SqlServer => builder.UseSqlServer(_connectionString), DatabaseTypeEnum.MySql => builder.UseMySql(_connectionString, string.IsNullOrEmpty(_databaseVersion) ? MySqlServerVersion.AutoDetect(_connectionString) : new MySqlServerVersion(_databaseVersion)), DatabaseTypeEnum.PostgreSQL => builder.UseNpgsql(_connectionString), _ => throw new DatabaseNotSupportedException() }; } public DbSet Articles => Set(); public DbSet ArticleTags => Set(); public DbSet Categories => Set(); public DbSet Tags => Set(); public DbSet Users => Set(); public DbSet Comments => Set(); } }