using System; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Oqtane.Models; using Microsoft.Extensions.Configuration; using Oqtane.Extensions; using Oqtane.Shared; // ReSharper disable BuiltInTypeReferenceStyleForMemberAccess // ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable CheckNamespace namespace Oqtane.Repository { public class MasterDBContext : DbContext { private readonly IDbConfig _dbConfig; public MasterDBContext(DbContextOptions options, IDbConfig dbConfig) : base(options) { _dbConfig = dbConfig; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var connectionString = _dbConfig.ConnectionString; var configuration = _dbConfig.Configuration; var databaseType = _dbConfig.DatabaseType; if(string.IsNullOrEmpty(connectionString) && configuration != null) { if (!String.IsNullOrEmpty(configuration.GetConnectionString("DefaultConnection"))) { connectionString = configuration.GetConnectionString("DefaultConnection") .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString()); } databaseType = configuration.GetSection(SettingKeys.DatabaseSection)[SettingKeys.DatabaseTypeKey]; } if (!string.IsNullOrEmpty(connectionString)) { optionsBuilder.UseOqtaneDatabase(databaseType, connectionString); } base.OnConfiguring(optionsBuilder); } public virtual DbSet Alias { get; set; } public virtual DbSet Tenant { get; set; } public virtual DbSet ModuleDefinition { get; set; } public virtual DbSet Job { get; set; } public virtual DbSet JobLog { get; set; } public override int SaveChanges() { DbContextUtils.SaveChanges(this, _dbConfig.Accessor); return base.SaveChanges(); } } }