update to load the data in scope.

This commit is contained in:
Ben 2024-03-19 09:19:56 +08:00
parent 055e54966d
commit 0cafef7ab4
14 changed files with 46 additions and 58 deletions

View File

@ -13,7 +13,6 @@ namespace Oqtane.Repository
public class FileRepository : IFileRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IPermissionRepository _permissions;
private readonly IFolderRepository _folderRepository;
private readonly ITenantManager _tenants;
@ -21,7 +20,6 @@ namespace Oqtane.Repository
public FileRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions, IFolderRepository folderRepository, ITenantManager tenants)
{
_dbContextFactory = dbContextFactory;
_queryContext = dbContextFactory.CreateDbContext();
_permissions = permissions;
_folderRepository = folderRepository;
_tenants = tenants;
@ -34,20 +32,21 @@ namespace Oqtane.Repository
public IEnumerable<File> GetFiles(int folderId, bool tracking)
{
using var db = _dbContextFactory.CreateDbContext();
var folder = _folderRepository.GetFolder(folderId, false);
IEnumerable<Permission> permissions = _permissions.GetPermissions(folder.SiteId, EntityNames.Folder, folderId).ToList();
var permissions = _permissions.GetPermissions(folder.SiteId, EntityNames.Folder, folderId).ToList();
IEnumerable<File> files;
if (tracking)
{
files = _queryContext.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
files = db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder).ToList();
}
else
{
files = _queryContext.File.AsNoTracking().Where(item => item.FolderId == folderId).Include(item => item.Folder);
files = db.File.AsNoTracking().Where(item => item.FolderId == folderId).Include(item => item.Folder).ToList();
}
foreach (File file in files)
foreach (var file in files)
{
file.Folder.PermissionList = permissions.ToList();
var alias = _tenants.GetAlias();

View File

@ -12,7 +12,6 @@ namespace Oqtane.Repository
public class FolderRepository : IFolderRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IPermissionRepository _permissions;
private readonly IWebHostEnvironment _environment;
private readonly ITenantManager _tenants;
@ -20,7 +19,6 @@ namespace Oqtane.Repository
public FolderRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions,IWebHostEnvironment environment, ITenantManager tenants)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_permissions = permissions;
_environment = environment;
_tenants = tenants;
@ -28,8 +26,9 @@ namespace Oqtane.Repository
public IEnumerable<Folder> GetFolders(int siteId)
{
using var db = _dbContextFactory.CreateDbContext();
var permissions = _permissions.GetPermissions(siteId, EntityNames.Folder).ToList();
var folders = _queryContext.Folder.Where(item => item.SiteId == siteId);
var folders = db.Folder.Where(item => item.SiteId == siteId).ToList();
foreach (var folder in folders)
{
folder.PermissionList = permissions.Where(item => item.EntityId == folder.FolderId).ToList();

View File

@ -8,17 +8,16 @@ namespace Oqtane.Repository
public class LanguageRepository : ILanguageRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
public LanguageRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
}
public IEnumerable<Language> GetLanguages(int siteId)
{
return _queryContext.Language.Where(l => l.SiteId == siteId);
using var db = _dbContextFactory.CreateDbContext();
return db.Language.Where(l => l.SiteId == siteId).ToList();
}
public Language AddLanguage(Language language)

View File

@ -9,36 +9,35 @@ namespace Oqtane.Repository
public class LogRepository : ILogRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
public LogRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
}
public IEnumerable<Log> GetLogs(int siteId, string level, string function, int rows)
{
using var db = _dbContextFactory.CreateDbContext();
if (level == null)
{
if (function == null)
{
return _queryContext.Log.Where(item => item.SiteId == siteId).
OrderByDescending(item => item.LogDate).Take(rows);
return db.Log.Where(item => item.SiteId == siteId).
OrderByDescending(item => item.LogDate).Take(rows).ToList();
}
return _queryContext.Log.Where(item => item.SiteId == siteId && item.Function == function).
OrderByDescending(item => item.LogDate).Take(rows);
return db.Log.Where(item => item.SiteId == siteId && item.Function == function).
OrderByDescending(item => item.LogDate).Take(rows).ToList();
}
if (function == null)
{
return _queryContext.Log.Where(item => item.SiteId == siteId && item.Level == level)
.OrderByDescending(item => item.LogDate).Take(rows);
return db.Log.Where(item => item.SiteId == siteId && item.Level == level)
.OrderByDescending(item => item.LogDate).Take(rows).ToList();
}
return _queryContext.Log.Where(item => item.SiteId == siteId && item.Level == level && item.Function == function)
.OrderByDescending(item => item.LogDate).Take(rows);
return db.Log.Where(item => item.SiteId == siteId && item.Level == level && item.Function == function)
.OrderByDescending(item => item.LogDate).Take(rows).ToList();
}
public Log GetLog(int logId)

View File

@ -15,7 +15,6 @@ namespace Oqtane.Repository
public class ModuleRepository : IModuleRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IPermissionRepository _permissions;
private readonly ISettingRepository _settings;
private readonly IModuleDefinitionRepository _moduleDefinitions;
@ -24,7 +23,6 @@ namespace Oqtane.Repository
public ModuleRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions, ISettingRepository settings, IModuleDefinitionRepository moduleDefinitions, IServiceProvider serviceProvider)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_permissions = permissions;
_settings = settings;
_moduleDefinitions = moduleDefinitions;
@ -33,7 +31,8 @@ namespace Oqtane.Repository
public IEnumerable<Module> GetModules(int siteId)
{
return _queryContext.Module.Where(item => item.SiteId == siteId);
using var db = _dbContextFactory.CreateDbContext();
return db.Module.Where(item => item.SiteId == siteId).ToList();
}
public Module AddModule(Module module)

View File

@ -10,7 +10,6 @@ namespace Oqtane.Repository
public class PageRepository : IPageRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IPageModuleRepository _pageModules;
private readonly IPermissionRepository _permissions;
private readonly ISettingRepository _settings;
@ -18,7 +17,6 @@ namespace Oqtane.Repository
public PageRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPageModuleRepository pageModules, IPermissionRepository permissions, ISettingRepository settings)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_pageModules = pageModules;
_permissions = permissions;
_settings = settings;
@ -26,8 +24,9 @@ namespace Oqtane.Repository
public IEnumerable<Page> GetPages(int siteId)
{
using var db = _dbContextFactory.CreateDbContext();
var permissions = _permissions.GetPermissions(siteId, EntityNames.Page).ToList();
var pages = _queryContext.Page.Where(item => item.SiteId == siteId && item.UserId == null);
var pages = db.Page.Where(item => item.SiteId == siteId && item.UserId == null).ToList();
foreach (var page in pages)
{
page.PermissionList = permissions.Where(item => item.EntityId == page.PageId).ToList();

View File

@ -8,17 +8,16 @@ namespace Oqtane.Repository
public class ProfileRepository : IProfileRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
public ProfileRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
}
public IEnumerable<Profile> GetProfiles(int siteId)
{
return _queryContext.Profile.Where(item => item.SiteId == siteId || item.SiteId == null);
using var db = _dbContextFactory.CreateDbContext();
return db.Profile.Where(item => item.SiteId == siteId || item.SiteId == null).ToList();
}
public Profile AddProfile(Profile profile)

View File

@ -8,12 +8,10 @@ namespace Oqtane.Repository
public class RoleRepository : IRoleRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
public RoleRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
}
public IEnumerable<Role> GetRoles(int siteId)
@ -23,13 +21,14 @@ namespace Oqtane.Repository
public IEnumerable<Role> GetRoles(int siteId, bool includeGlobalRoles)
{
using var db = _dbContextFactory.CreateDbContext();
if (includeGlobalRoles)
{
return _queryContext.Role.Where(item => item.SiteId == siteId || item.SiteId == null);
return db.Role.Where(item => item.SiteId == siteId || item.SiteId == null).ToList();
}
else
{
return _queryContext.Role.Where(item => item.SiteId == siteId);
return db.Role.Where(item => item.SiteId == siteId).ToList();
}
}

View File

@ -12,7 +12,6 @@ namespace Oqtane.Repository
public class SettingRepository : ISettingRepository
{
private readonly IDbContextFactory<TenantDBContext> _tenantContextFactory;
private readonly TenantDBContext _tenantQueryContext;
private MasterDBContext _master;
private readonly ITenantManager _tenantManager;
private readonly IMemoryCache _cache;
@ -20,7 +19,6 @@ namespace Oqtane.Repository
public SettingRepository(IDbContextFactory<TenantDBContext> tenantContextFactory, MasterDBContext master, ITenantManager tenantManager, IMemoryCache cache)
{
_tenantContextFactory = tenantContextFactory;
_tenantQueryContext = tenantContextFactory.CreateDbContext();
_master = master;
_tenantManager = tenantManager;
_cache = cache;
@ -34,7 +32,8 @@ namespace Oqtane.Repository
}
else
{
return _tenantQueryContext.Setting.Where(item => item.EntityName == entityName);
using var db = _tenantContextFactory.CreateDbContext();
return db.Setting.Where(item => item.EntityName == entityName).ToList();
}
}

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Oqtane.Enums;
@ -18,7 +19,6 @@ namespace Oqtane.Repository
public class SiteRepository : ISiteRepository
{
private readonly IDbContextFactory<TenantDBContext> _factory;
private readonly TenantDBContext _queryContext;
private readonly IRoleRepository _roleRepository;
private readonly IProfileRepository _profileRepository;
private readonly IFolderRepository _folderRepository;
@ -38,7 +38,6 @@ namespace Oqtane.Repository
IConfigurationRoot config, IServerStateManager serverState, ILogManager logger)
{
_factory = factory;
_queryContext = _factory.CreateDbContext();
_roleRepository = roleRepository;
_profileRepository = profileRepository;
_folderRepository = folderRepository;
@ -107,7 +106,8 @@ namespace Oqtane.Repository
// synchronous methods
public IEnumerable<Site> GetSites()
{
return _queryContext.Site.OrderBy(item => item.Name);
using var db = _factory.CreateDbContext();
return db.Site.OrderBy(item => item.Name).ToList();
}
public Site AddSite(Site site)

View File

@ -9,25 +9,24 @@ namespace Oqtane.Repository
public class UrlMappingRepository : IUrlMappingRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly ISiteRepository _sites;
public UrlMappingRepository(IDbContextFactory<TenantDBContext> dbContextFactory, ISiteRepository sites)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_sites = sites;
}
public IEnumerable<UrlMapping> GetUrlMappings(int siteId, bool isMapped)
{
using var db = _dbContextFactory.CreateDbContext();
if (isMapped)
{
return _queryContext.UrlMapping.Where(item => item.SiteId == siteId && !string.IsNullOrEmpty(item.MappedUrl)).Take(200);
return db.UrlMapping.Where(item => item.SiteId == siteId && !string.IsNullOrEmpty(item.MappedUrl)).Take(200).ToList();
}
else
{
return _queryContext.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl)).Take(200);
return db.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl)).Take(200).ToList();
}
}

View File

@ -9,7 +9,6 @@ namespace Oqtane.Repository
public class UserRepository : IUserRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IFolderRepository _folders;
private readonly IRoleRepository _roles;
private readonly IUserRoleRepository _userroles;
@ -17,7 +16,6 @@ namespace Oqtane.Repository
public UserRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IFolderRepository folders, IRoleRepository roles, IUserRoleRepository userroles)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_folders = folders;
_roles = roles;
_userroles = userroles;
@ -25,7 +23,8 @@ namespace Oqtane.Repository
public IEnumerable<User> GetUsers()
{
return _queryContext.User;
using var db = _dbContextFactory.CreateDbContext();
return db.User.ToList();
}
public User AddUser(User user)

View File

@ -9,30 +9,30 @@ namespace Oqtane.Repository
public class UserRoleRepository : IUserRoleRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
private readonly IRoleRepository _roles;
public UserRoleRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IRoleRepository roles)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
_roles = roles;
}
public IEnumerable<UserRole> GetUserRoles(int siteId)
{
return _queryContext.UserRole
using var db = _dbContextFactory.CreateDbContext();
return db.UserRole
.Include(item => item.Role) // eager load roles
.Include(item => item.User) // eager load users
.Where(item => item.Role.SiteId == siteId || item.Role.SiteId == null);
.Where(item => item.Role.SiteId == siteId || item.Role.SiteId == null).ToList();
}
public IEnumerable<UserRole> GetUserRoles(int userId, int siteId)
{
return _queryContext.UserRole.Where(item => item.UserId == userId)
using var db = _dbContextFactory.CreateDbContext();
return db.UserRole.Where(item => item.UserId == userId)
.Include(item => item.Role) // eager load roles
.Include(item => item.User) // eager load users
.Where(item => item.Role.SiteId == siteId || item.Role.SiteId == null || siteId == -1);
.Where(item => item.Role.SiteId == siteId || item.Role.SiteId == null || siteId == -1).ToList();
}
public UserRole AddUserRole(UserRole userRole)

View File

@ -9,19 +9,18 @@ namespace Oqtane.Repository
public class VisitorRepository : IVisitorRepository
{
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
private readonly TenantDBContext _queryContext;
public VisitorRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
_queryContext = _dbContextFactory.CreateDbContext();
}
public IEnumerable<Visitor> GetVisitors(int siteId, DateTime fromDate)
{
return _queryContext.Visitor.AsNoTracking()
using var db = _dbContextFactory.CreateDbContext();
return db.Visitor.AsNoTracking()
.Include(item => item.User) // eager load users
.Where(item => item.SiteId == siteId && item.VisitedOn >= fromDate);
.Where(item => item.SiteId == siteId && item.VisitedOn >= fromDate).ToList();
}
public Visitor AddVisitor(Visitor visitor)