refactor TenantDBContext to accomodate AspNetUserPasskeys
This commit is contained in:
@@ -4,7 +4,6 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@@ -19,7 +18,7 @@ using Oqtane.Shared;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class DBContextBase : IdentityUserContext<IdentityUser>
|
||||
public class DBContextBase : DbContext
|
||||
{
|
||||
private readonly ITenantManager _tenantManager;
|
||||
private readonly IHttpContextAccessor _accessor;
|
||||
@@ -75,8 +74,6 @@ namespace Oqtane.Repository
|
||||
protected override void OnModelCreating(ModelBuilder builder)
|
||||
{
|
||||
base.OnModelCreating(builder);
|
||||
|
||||
ActiveDatabase.UpdateIdentityStoreTableNames(builder);
|
||||
}
|
||||
|
||||
public override int SaveChanges()
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Oqtane.Databases.Interfaces;
|
||||
using Oqtane.Extensions;
|
||||
using Oqtane.Infrastructure;
|
||||
using Oqtane.Migrations.Framework;
|
||||
using Oqtane.Models;
|
||||
using Oqtane.Repository.Databases.Interfaces;
|
||||
using Oqtane.Shared;
|
||||
|
||||
// ReSharper disable CheckNamespace
|
||||
// ReSharper disable MemberCanBePrivate.Global
|
||||
@@ -8,9 +21,79 @@ using Oqtane.Repository.Databases.Interfaces;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class TenantDBContext : DBContextBase, IMultiDatabase
|
||||
public class TenantDBContext : IdentityUserContext<IdentityUser>, IMultiDatabase
|
||||
{
|
||||
public TenantDBContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies) { }
|
||||
private readonly ITenantManager _tenantManager;
|
||||
private readonly IHttpContextAccessor _accessor;
|
||||
private readonly IConfigurationRoot _config;
|
||||
private string _connectionString = "";
|
||||
private string _databaseType = "";
|
||||
|
||||
public TenantDBContext(DbContextOptions<TenantDBContext> options, IDBContextDependencies DBContextDependencies) : base(options)
|
||||
{
|
||||
_tenantManager = DBContextDependencies.TenantManager;
|
||||
_accessor = DBContextDependencies.Accessor;
|
||||
_config = DBContextDependencies.Config;
|
||||
}
|
||||
|
||||
public IDatabase ActiveDatabase { get; set; }
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.ReplaceService<IMigrationsAssembly, MultiDatabaseMigrationsAssembly>();
|
||||
|
||||
if (string.IsNullOrEmpty(_connectionString))
|
||||
{
|
||||
Tenant tenant = _tenantManager.GetTenant();
|
||||
if (tenant != null)
|
||||
{
|
||||
_connectionString = _config.GetConnectionString(tenant.DBConnectionString);
|
||||
if (_connectionString != null)
|
||||
{
|
||||
_connectionString = _connectionString.Replace($"|{Constants.DataDirectory}|", AppDomain.CurrentDomain.GetData(Constants.DataDirectory)?.ToString());
|
||||
_databaseType = tenant.DBType;
|
||||
}
|
||||
else
|
||||
{
|
||||
// tenant connection string does not exist in appsettings.json
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(_databaseType))
|
||||
{
|
||||
var type = Type.GetType(_databaseType);
|
||||
ActiveDatabase = Activator.CreateInstance(type) as IDatabase;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(_connectionString) && ActiveDatabase != null)
|
||||
{
|
||||
optionsBuilder.UseOqtaneDatabase(ActiveDatabase, _connectionString);
|
||||
}
|
||||
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder builder)
|
||||
{
|
||||
base.OnModelCreating(builder);
|
||||
|
||||
ActiveDatabase.UpdateIdentityStoreTableNames(builder);
|
||||
}
|
||||
|
||||
public override int SaveChanges()
|
||||
{
|
||||
DbContextUtils.SaveChanges(this, _accessor);
|
||||
|
||||
return base.SaveChanges();
|
||||
}
|
||||
|
||||
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
DbContextUtils.SaveChanges(this, _accessor);
|
||||
|
||||
return base.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public virtual DbSet<Site> Site { get; set; }
|
||||
public virtual DbSet<Page> Page { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user