Create new UseOqtaneDatabase extension method and replace all uses of UseSqlServer.

This is a preparative step to locate all database configuration in one file.
This commit is contained in:
Charles Nurse 2021-03-06 14:13:06 -08:00
parent af896e0fa8
commit 8376a09ad6
5 changed files with 36 additions and 16 deletions

View File

@ -0,0 +1,15 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.EntityFrameworkCore;
namespace Oqtane.Extensions
{
public static class DbContextOptionsBuilderExtensions
{
public static DbContextOptionsBuilder UseOqtaneDatabase([NotNull] this DbContextOptionsBuilder optionsBuilder, string connectionString)
{
optionsBuilder.UseSqlServer(connectionString);
return optionsBuilder;
}
}
}

View File

@ -168,9 +168,10 @@ namespace Oqtane.Infrastructure
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString(); var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString();
if (!Directory.Exists(dataDirectory)) Directory.CreateDirectory(dataDirectory); if (!Directory.Exists(dataDirectory)) Directory.CreateDirectory(dataDirectory);
using (var dbc = new DbContext(new DbContextOptionsBuilder().UseSqlServer(NormalizeConnectionString(install.ConnectionString)).Options)) var connectionString = NormalizeConnectionString(install.ConnectionString);
using (var dbc = new DbContext(new DbContextOptionsBuilder().UseOqtaneDatabase(connectionString).Options))
{ {
// create empty database if it does not exist // create empty database if it does not exist
dbc.Database.EnsureCreated(); dbc.Database.EnsureCreated();
result.Success = true; result.Success = true;
} }
@ -235,7 +236,7 @@ namespace Oqtane.Infrastructure
if (!string.IsNullOrEmpty(install.TenantName) && !string.IsNullOrEmpty(install.Aliases)) if (!string.IsNullOrEmpty(install.TenantName) && !string.IsNullOrEmpty(install.Aliases))
{ {
using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey))))
{ {
Tenant tenant; Tenant tenant;
if (install.IsNewTenant) if (install.IsNewTenant)
@ -274,7 +275,7 @@ namespace Oqtane.Infrastructure
using (var scope = _serviceScopeFactory.CreateScope()) using (var scope = _serviceScopeFactory.CreateScope())
{ {
var upgrades = scope.ServiceProvider.GetRequiredService<IUpgradeManager>(); var upgrades = scope.ServiceProvider.GetRequiredService<IUpgradeManager>();
using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey))))
{ {
foreach (var tenant in db.Tenant.ToList()) foreach (var tenant in db.Tenant.ToList())

View File

@ -4,11 +4,12 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models; using Oqtane.Models;
namespace Oqtane.Repository namespace Oqtane.Repository
{ {
public class DBContextBase : IdentityUserContext<IdentityUser> public class DBContextBase : IdentityUserContext<IdentityUser>
{ {
private ITenantResolver _tenantResolver; private ITenantResolver _tenantResolver;
private IHttpContextAccessor _accessor; private IHttpContextAccessor _accessor;
@ -24,9 +25,9 @@ namespace Oqtane.Repository
var tenant = _tenantResolver.GetTenant(); var tenant = _tenantResolver.GetTenant();
if (tenant != null) if (tenant != null)
{ {
optionsBuilder.UseSqlServer(tenant.DBConnectionString var connectionString = tenant.DBConnectionString
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString()) .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString());
); optionsBuilder.UseOqtaneDatabase(connectionString);
} }
base.OnConfiguring(optionsBuilder); base.OnConfiguring(optionsBuilder);
} }

View File

@ -1,10 +1,11 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Models; using Oqtane.Models;
namespace Oqtane.Repository namespace Oqtane.Repository
{ {
public class InstallationContext : DbContext public class InstallationContext : DbContext
{ {
private readonly string _connectionString; private readonly string _connectionString;
@ -15,7 +16,7 @@ namespace Oqtane.Repository
} }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(_connectionString); => optionsBuilder.UseOqtaneDatabase(_connectionString);
public virtual DbSet<Alias> Alias { get; set; } public virtual DbSet<Alias> Alias { get; set; }
public virtual DbSet<Tenant> Tenant { get; set; } public virtual DbSet<Tenant> Tenant { get; set; }

View File

@ -4,13 +4,14 @@ using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Models; using Oqtane.Models;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Oqtane.Extensions;
namespace Oqtane.Repository namespace Oqtane.Repository
{ {
public class MasterDBContext : DbContext public class MasterDBContext : DbContext
{ {
private IHttpContextAccessor _accessor; private readonly IHttpContextAccessor _accessor;
private IConfiguration _configuration; private readonly IConfiguration _configuration;
public MasterDBContext(DbContextOptions<MasterDBContext> options, IHttpContextAccessor accessor, IConfiguration configuration) : base(options) public MasterDBContext(DbContextOptions<MasterDBContext> options, IHttpContextAccessor accessor, IConfiguration configuration) : base(options)
{ {
@ -20,11 +21,12 @@ namespace Oqtane.Repository
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
if (!string.IsNullOrEmpty(_configuration.GetConnectionString("DefaultConnection"))) if (!String.IsNullOrEmpty(_configuration.GetConnectionString("DefaultConnection")))
{ {
optionsBuilder.UseSqlServer(_configuration.GetConnectionString("DefaultConnection") var connectionString = _configuration.GetConnectionString("DefaultConnection")
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString()) .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString());
);
optionsBuilder.UseOqtaneDatabase(connectionString);
} }
base.OnConfiguring(optionsBuilder); base.OnConfiguring(optionsBuilder);
} }