Fix #3977: use db context factory.

This commit is contained in:
Ben 2024-03-17 21:29:32 +08:00
parent 0f3b0309e8
commit 40cc0f721d

View File

@ -10,15 +10,15 @@ namespace Oqtane.Repository
{ {
public class PageModuleRepository : IPageModuleRepository public class PageModuleRepository : IPageModuleRepository
{ {
private TenantDBContext _db; private IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly IModuleDefinitionRepository _moduleDefinitions; private readonly IModuleDefinitionRepository _moduleDefinitions;
private readonly IModuleRepository _modules; private readonly IModuleRepository _modules;
private readonly IPermissionRepository _permissions; private readonly IPermissionRepository _permissions;
private readonly ISettingRepository _settings; private readonly ISettingRepository _settings;
public PageModuleRepository(TenantDBContext context, IModuleDefinitionRepository moduleDefinitions, IModuleRepository modules, IPermissionRepository permissions, ISettingRepository settings) public PageModuleRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IModuleDefinitionRepository moduleDefinitions, IModuleRepository modules, IPermissionRepository permissions, ISettingRepository settings)
{ {
_db = context; _dbContextFactory = dbContextFactory;
_moduleDefinitions = moduleDefinitions; _moduleDefinitions = moduleDefinitions;
_modules = modules; _modules = modules;
_permissions = permissions; _permissions = permissions;
@ -27,33 +27,43 @@ namespace Oqtane.Repository
public IEnumerable<PageModule> GetPageModules(int siteId) public IEnumerable<PageModule> GetPageModules(int siteId)
{ {
var pagemodules = _db.PageModule using(var db = _dbContextFactory.CreateDbContext())
{
var pagemodules = db.PageModule
.Include(item => item.Module) // eager load modules .Include(item => item.Module) // eager load modules
.Where(item => item.Module.SiteId == siteId).ToList(); .Where(item => item.Module.SiteId == siteId).ToList();
if (pagemodules.Any()) if (pagemodules.Any())
{
var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(siteId).ToList();
var permissions = _permissions.GetPermissions(siteId, EntityNames.Module).ToList();
for (int index = 0; index < pagemodules.Count; index++)
{ {
pagemodules[index] = GetPageModule(pagemodules[index], moduledefinitions, permissions); var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(siteId).ToList();
var permissions = _permissions.GetPermissions(siteId, EntityNames.Module).ToList();
for (int index = 0; index < pagemodules.Count; index++)
{
pagemodules[index] = GetPageModule(pagemodules[index], moduledefinitions, permissions);
}
} }
return pagemodules;
} }
return pagemodules;
} }
public PageModule AddPageModule(PageModule pageModule) public PageModule AddPageModule(PageModule pageModule)
{ {
_db.PageModule.Add(pageModule); using (var db = _dbContextFactory.CreateDbContext())
_db.SaveChanges(); {
return pageModule; db.PageModule.Add(pageModule);
db.SaveChanges();
return pageModule;
}
} }
public PageModule UpdatePageModule(PageModule pageModule) public PageModule UpdatePageModule(PageModule pageModule)
{ {
_db.Entry(pageModule).State = EntityState.Modified; using (var db = _dbContextFactory.CreateDbContext())
_db.SaveChanges(); {
return pageModule; db.Entry(pageModule).State = EntityState.Modified;
db.SaveChanges();
return pageModule;
}
} }
public PageModule GetPageModule(int pageModuleId) public PageModule GetPageModule(int pageModuleId)
@ -63,52 +73,61 @@ namespace Oqtane.Repository
public PageModule GetPageModule(int pageModuleId, bool tracking) public PageModule GetPageModule(int pageModuleId, bool tracking)
{ {
PageModule pagemodule; using (var db = _dbContextFactory.CreateDbContext())
if (tracking)
{ {
pagemodule = _db.PageModule.Include(item => item.Module) // eager load modules PageModule pagemodule;
.FirstOrDefault(item => item.PageModuleId == pageModuleId); if (tracking)
{
pagemodule = db.PageModule.Include(item => item.Module) // eager load modules
.FirstOrDefault(item => item.PageModuleId == pageModuleId);
}
else
{
pagemodule = db.PageModule.AsNoTracking().Include(item => item.Module) // eager load modules
.FirstOrDefault(item => item.PageModuleId == pageModuleId);
}
if (pagemodule != null)
{
var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(pagemodule.Module.SiteId).ToList();
var permissions = _permissions.GetPermissions(pagemodule.Module.SiteId, EntityNames.Module).ToList();
pagemodule = GetPageModule(pagemodule, moduledefinitions, permissions);
}
return pagemodule;
} }
else
{
pagemodule = _db.PageModule.AsNoTracking().Include(item => item.Module) // eager load modules
.FirstOrDefault(item => item.PageModuleId == pageModuleId);
}
if (pagemodule != null)
{
var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(pagemodule.Module.SiteId).ToList();
var permissions = _permissions.GetPermissions(pagemodule.Module.SiteId, EntityNames.Module).ToList();
pagemodule = GetPageModule(pagemodule, moduledefinitions, permissions);
}
return pagemodule;
} }
public PageModule GetPageModule(int pageId, int moduleId) public PageModule GetPageModule(int pageId, int moduleId)
{ {
PageModule pagemodule = _db.PageModule.Include(item => item.Module) // eager load modules using (var db = _dbContextFactory.CreateDbContext())
.SingleOrDefault(item => item.PageId == pageId && item.ModuleId == moduleId);
if (pagemodule != null)
{ {
var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(pagemodule.Module.SiteId).ToList(); PageModule pagemodule = db.PageModule.Include(item => item.Module) // eager load modules
var permissions = _permissions.GetPermissions(pagemodule.Module.SiteId, EntityNames.Module).ToList(); .SingleOrDefault(item => item.PageId == pageId && item.ModuleId == moduleId);
pagemodule = GetPageModule(pagemodule, moduledefinitions, permissions); if (pagemodule != null)
{
var moduledefinitions = _moduleDefinitions.GetModuleDefinitions(pagemodule.Module.SiteId).ToList();
var permissions = _permissions.GetPermissions(pagemodule.Module.SiteId, EntityNames.Module).ToList();
pagemodule = GetPageModule(pagemodule, moduledefinitions, permissions);
}
return pagemodule;
} }
return pagemodule;
} }
public void DeletePageModule(int pageModuleId) public void DeletePageModule(int pageModuleId)
{ {
PageModule pageModule = _db.PageModule.Include(item => item.Module) // eager load modules using (var db = _dbContextFactory.CreateDbContext())
.SingleOrDefault(item => item.PageModuleId == pageModuleId);
_settings.DeleteSettings(EntityNames.PageModule, pageModuleId);
_db.PageModule.Remove(pageModule);
_db.SaveChanges();
// check if there are any remaining module instances in the site
var pageModules = GetPageModules(pageModule.Module.SiteId);
if (!pageModules.Any(item => item.ModuleId == pageModule.ModuleId))
{ {
_modules.DeleteModule(pageModule.ModuleId); PageModule pageModule = db.PageModule.Include(item => item.Module) // eager load modules
.SingleOrDefault(item => item.PageModuleId == pageModuleId);
_settings.DeleteSettings(EntityNames.PageModule, pageModuleId);
db.PageModule.Remove(pageModule);
db.SaveChanges();
// check if there are any remaining module instances in the site
var pageModules = GetPageModules(pageModule.Module.SiteId);
if (!pageModules.Any(item => item.ModuleId == pageModule.ModuleId))
{
_modules.DeleteModule(pageModule.ModuleId);
}
} }
} }