Fix #4010: update repositories to using db context factory.

This commit is contained in:
Ben
2024-03-18 15:32:19 +08:00
parent ce710134ac
commit c58254f951
18 changed files with 460 additions and 355 deletions

View File

@ -14,15 +14,17 @@ namespace Oqtane.Repository
{
public class ModuleRepository : IModuleRepository
{
private TenantDBContext _db;
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IPermissionRepository _permissions;
private readonly ISettingRepository _settings;
private readonly IModuleDefinitionRepository _moduleDefinitions;
private readonly IServiceProvider _serviceProvider;
public ModuleRepository(TenantDBContext context, IPermissionRepository permissions, ISettingRepository settings, IModuleDefinitionRepository moduleDefinitions, IServiceProvider serviceProvider)
public ModuleRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions, ISettingRepository settings, IModuleDefinitionRepository moduleDefinitions, IServiceProvider serviceProvider)
{
_db = context;
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_permissions = permissions;
_settings = settings;
_moduleDefinitions = moduleDefinitions;
@ -31,21 +33,23 @@ namespace Oqtane.Repository
public IEnumerable<Module> GetModules(int siteId)
{
return _db.Module.Where(item => item.SiteId == siteId).ToList();
return _queryContext.Module.Where(item => item.SiteId == siteId);
}
public Module AddModule(Module module)
{
_db.Module.Add(module);
_db.SaveChanges();
using var db = _dbContextFactory.CreateDbContext();
db.Module.Add(module);
db.SaveChanges();
_permissions.UpdatePermissions(module.SiteId, EntityNames.Module, module.ModuleId, module.PermissionList);
return module;
}
public Module UpdateModule(Module module)
{
_db.Entry(module).State = EntityState.Modified;
_db.SaveChanges();
using var db = _dbContextFactory.CreateDbContext();
db.Entry(module).State = EntityState.Modified;
db.SaveChanges();
_permissions.UpdatePermissions(module.SiteId, EntityNames.Module, module.ModuleId, module.PermissionList);
return module;
}
@ -57,14 +61,15 @@ namespace Oqtane.Repository
public Module GetModule(int moduleId, bool tracking)
{
using var db = _dbContextFactory.CreateDbContext();
Module module;
if (tracking)
{
module = _db.Module.Find(moduleId);
module = db.Module.Find(moduleId);
}
else
{
module = _db.Module.AsNoTracking().FirstOrDefault(item => item.ModuleId == moduleId);
module = db.Module.AsNoTracking().FirstOrDefault(item => item.ModuleId == moduleId);
}
if (module != null)
{
@ -75,11 +80,12 @@ namespace Oqtane.Repository
public void DeleteModule(int moduleId)
{
Module module = _db.Module.Find(moduleId);
using var db = _dbContextFactory.CreateDbContext();
var module = db.Module.Find(moduleId);
_permissions.DeletePermissions(module.SiteId, EntityNames.Module, moduleId);
_settings.DeleteSettings(EntityNames.Module, moduleId);
_db.Module.Remove(module);
_db.SaveChanges();
db.Module.Remove(module);
db.SaveChanges();
}
public string ExportModule(int moduleId)