Fix #4010: update repositories to using db context factory.
This commit is contained in:
parent
ce710134ac
commit
c58254f951
|
@ -12,14 +12,16 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class FileRepository : IFileRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IPermissionRepository _permissions;
|
||||
private readonly IFolderRepository _folderRepository;
|
||||
private readonly ITenantManager _tenants;
|
||||
|
||||
public FileRepository(TenantDBContext context, IPermissionRepository permissions, IFolderRepository folderRepository, ITenantManager tenants)
|
||||
public FileRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions, IFolderRepository folderRepository, ITenantManager tenants)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = dbContextFactory.CreateDbContext();
|
||||
_permissions = permissions;
|
||||
_folderRepository = folderRepository;
|
||||
_tenants = tenants;
|
||||
|
@ -38,12 +40,13 @@ namespace Oqtane.Repository
|
|||
IEnumerable<File> files;
|
||||
if (tracking)
|
||||
{
|
||||
files = _db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
|
||||
files = _queryContext.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
|
||||
}
|
||||
else
|
||||
{
|
||||
files = _db.File.AsNoTracking().Where(item => item.FolderId == folderId).Include(item => item.Folder);
|
||||
files = _queryContext.File.AsNoTracking().Where(item => item.FolderId == folderId).Include(item => item.Folder);
|
||||
}
|
||||
|
||||
foreach (File file in files)
|
||||
{
|
||||
file.Folder.PermissionList = permissions.ToList();
|
||||
|
@ -55,9 +58,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public File AddFile(File file)
|
||||
{
|
||||
file.IsDeleted = false;
|
||||
_db.File.Add(file);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext(); file.IsDeleted = false;
|
||||
db.File.Add(file);
|
||||
db.SaveChanges();
|
||||
file.Folder = _folderRepository.GetFolder(file.FolderId);
|
||||
file.Url = GetFileUrl(file, _tenants.GetAlias());
|
||||
return file;
|
||||
|
@ -65,8 +68,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public File UpdateFile(File file)
|
||||
{
|
||||
_db.Entry(file).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(file).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
file.Folder = _folderRepository.GetFolder(file.FolderId);
|
||||
file.Url = GetFileUrl(file, _tenants.GetAlias());
|
||||
return file;
|
||||
|
@ -80,14 +84,14 @@ namespace Oqtane.Repository
|
|||
|
||||
public File GetFile(int fileId, bool tracking)
|
||||
{
|
||||
File file;
|
||||
using var db = _dbContextFactory.CreateDbContext(); File file;
|
||||
if (tracking)
|
||||
{
|
||||
file = _db.File.Include(item => item.Folder).FirstOrDefault(item => item.FileId == fileId);
|
||||
file = db.File.Include(item => item.Folder).FirstOrDefault(item => item.FileId == fileId);
|
||||
}
|
||||
else
|
||||
{
|
||||
file = _db.File.AsNoTracking().Include(item => item.Folder).FirstOrDefault(item => item.FileId == fileId);
|
||||
file = db.File.AsNoTracking().Include(item => item.Folder).FirstOrDefault(item => item.FileId == fileId);
|
||||
}
|
||||
if (file != null)
|
||||
{
|
||||
|
@ -99,7 +103,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public File GetFile(int folderId, string fileName)
|
||||
{
|
||||
var file = _db.File.AsNoTracking()
|
||||
using var db = _dbContextFactory.CreateDbContext(); var file = db.File.AsNoTracking()
|
||||
.Include(item => item.Folder)
|
||||
.FirstOrDefault(item => item.FolderId == folderId &&
|
||||
item.Name.ToLower() == fileName);
|
||||
|
@ -115,7 +119,8 @@ namespace Oqtane.Repository
|
|||
|
||||
public File GetFile(int siteId, string folderPath, string fileName)
|
||||
{
|
||||
var file = _db.File.AsNoTracking()
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var file = db.File.AsNoTracking()
|
||||
.Include(item => item.Folder)
|
||||
.FirstOrDefault(item => item.Folder.SiteId == siteId &&
|
||||
item.Folder.Path.ToLower() == folderPath &&
|
||||
|
@ -123,7 +128,7 @@ namespace Oqtane.Repository
|
|||
|
||||
if (file != null)
|
||||
{
|
||||
IEnumerable<Permission> permissions = _permissions.GetPermissions(file.Folder.SiteId, EntityNames.Folder, file.FolderId).ToList();
|
||||
var permissions = _permissions.GetPermissions(file.Folder.SiteId, EntityNames.Folder, file.FolderId).ToList();
|
||||
file.Folder.PermissionList = permissions.ToList();
|
||||
file.Url = GetFileUrl(file, _tenants.GetAlias());
|
||||
}
|
||||
|
@ -133,21 +138,24 @@ namespace Oqtane.Repository
|
|||
|
||||
public void DeleteFile(int fileId)
|
||||
{
|
||||
File file = _db.File.Find(fileId);
|
||||
_db.File.Remove(file);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var file = db.File.Find(fileId);
|
||||
db.File.Remove(file);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public string GetFilePath(int fileId)
|
||||
{
|
||||
var file = _db.File.Find(fileId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var file = db.File.Find(fileId);
|
||||
return GetFilePath(file);
|
||||
}
|
||||
|
||||
public string GetFilePath(File file)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (file == null) return null;
|
||||
var folder = file.Folder ?? _db.Folder.AsNoTracking().FirstOrDefault(item => item.FolderId == file.FolderId);
|
||||
var folder = file.Folder ?? db.Folder.AsNoTracking().FirstOrDefault(item => item.FolderId == file.FolderId);
|
||||
var filepath = Path.Combine(_folderRepository.GetFolderPath(folder), file.Name);
|
||||
return filepath;
|
||||
}
|
||||
|
|
|
@ -11,14 +11,16 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class FolderRepository : IFolderRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IPermissionRepository _permissions;
|
||||
private readonly IWebHostEnvironment _environment;
|
||||
private readonly ITenantManager _tenants;
|
||||
|
||||
public FolderRepository(TenantDBContext context, IPermissionRepository permissions,IWebHostEnvironment environment, ITenantManager tenants)
|
||||
public FolderRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPermissionRepository permissions,IWebHostEnvironment environment, ITenantManager tenants)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
_permissions = permissions;
|
||||
_environment = environment;
|
||||
_tenants = tenants;
|
||||
|
@ -26,9 +28,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<Folder> GetFolders(int siteId)
|
||||
{
|
||||
IEnumerable<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.Folder).ToList();
|
||||
IEnumerable<Folder> folders = _db.Folder.Where(item => item.SiteId == siteId);
|
||||
foreach(Folder folder in folders)
|
||||
var permissions = _permissions.GetPermissions(siteId, EntityNames.Folder).ToList();
|
||||
var folders = _queryContext.Folder.Where(item => item.SiteId == siteId);
|
||||
foreach (var folder in folders)
|
||||
{
|
||||
folder.PermissionList = permissions.Where(item => item.EntityId == folder.FolderId).ToList();
|
||||
}
|
||||
|
@ -37,17 +39,19 @@ namespace Oqtane.Repository
|
|||
|
||||
public Folder AddFolder(Folder folder)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
folder.IsDeleted = false;
|
||||
_db.Folder.Add(folder);
|
||||
_db.SaveChanges();
|
||||
db.Folder.Add(folder);
|
||||
db.SaveChanges();
|
||||
_permissions.UpdatePermissions(folder.SiteId, EntityNames.Folder, folder.FolderId, folder.PermissionList);
|
||||
return folder;
|
||||
}
|
||||
|
||||
public Folder UpdateFolder(Folder folder)
|
||||
{
|
||||
_db.Entry(folder).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(folder).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
_permissions.UpdatePermissions(folder.SiteId, EntityNames.Folder, folder.FolderId, folder.PermissionList);
|
||||
return folder;
|
||||
}
|
||||
|
@ -59,14 +63,15 @@ namespace Oqtane.Repository
|
|||
|
||||
public Folder GetFolder(int folderId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
Folder folder;
|
||||
if (tracking)
|
||||
{
|
||||
folder = _db.Folder.Find(folderId);
|
||||
folder = db.Folder.Find(folderId);
|
||||
}
|
||||
else
|
||||
{
|
||||
folder = _db.Folder.AsNoTracking().Where(item => item.FolderId == folderId).FirstOrDefault();
|
||||
folder = db.Folder.AsNoTracking().Where(item => item.FolderId == folderId).FirstOrDefault();
|
||||
}
|
||||
if (folder != null)
|
||||
{
|
||||
|
@ -77,7 +82,8 @@ namespace Oqtane.Repository
|
|||
|
||||
public Folder GetFolder(int siteId, string path)
|
||||
{
|
||||
Folder folder = _db.Folder.Where(item => item.SiteId == siteId && item.Path == path).FirstOrDefault();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var folder = db.Folder.Where(item => item.SiteId == siteId && item.Path == path).FirstOrDefault();
|
||||
if (folder != null)
|
||||
{
|
||||
folder.PermissionList = _permissions.GetPermissions(folder.SiteId, EntityNames.Folder, folder.FolderId)?.ToList();
|
||||
|
@ -87,15 +93,17 @@ namespace Oqtane.Repository
|
|||
|
||||
public void DeleteFolder(int folderId)
|
||||
{
|
||||
Folder folder = _db.Folder.Find(folderId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var folder = db.Folder.Find(folderId);
|
||||
_permissions.DeletePermissions(folder.SiteId, EntityNames.Folder, folderId);
|
||||
_db.Folder.Remove(folder);
|
||||
_db.SaveChanges();
|
||||
db.Folder.Remove(folder);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public string GetFolderPath(int folderId)
|
||||
{
|
||||
Folder folder = _db.Folder.Find(folderId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var folder = db.Folder.Find(folderId);
|
||||
return GetFolderPath(folder);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,64 +7,70 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class LanguageRepository : ILanguageRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
|
||||
public LanguageRepository(TenantDBContext context)
|
||||
public LanguageRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Language> GetLanguages(int siteId)
|
||||
{
|
||||
return _db.Language.Where(l => l.SiteId == siteId);
|
||||
return _queryContext.Language.Where(l => l.SiteId == siteId);
|
||||
}
|
||||
|
||||
public Language AddLanguage(Language language)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (language.IsDefault)
|
||||
{
|
||||
// Ensure all other languages are not set to default
|
||||
_db.Language
|
||||
db.Language
|
||||
.Where(l => l.SiteId == language.SiteId)
|
||||
.ToList()
|
||||
.ForEach(l => l.IsDefault = false);
|
||||
}
|
||||
|
||||
_db.Language.Add(language);
|
||||
_db.SaveChanges();
|
||||
db.Language.Add(language);
|
||||
db.SaveChanges();
|
||||
|
||||
return language;
|
||||
}
|
||||
|
||||
public void UpdateLanguage(Language language)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (language.LanguageId != 0)
|
||||
{
|
||||
_db.Entry(language).State = EntityState.Modified;
|
||||
db.Entry(language).State = EntityState.Modified;
|
||||
}
|
||||
if (language.IsDefault)
|
||||
{
|
||||
// Ensure all other languages are not set to default
|
||||
_db.Language
|
||||
db.Language
|
||||
.Where(l => l.SiteId == language.SiteId &&
|
||||
l.LanguageId != language.LanguageId)
|
||||
.ToList()
|
||||
.ForEach(l => l.IsDefault = false);
|
||||
}
|
||||
|
||||
_db.SaveChanges();
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public Language GetLanguage(int languageId)
|
||||
{
|
||||
return _db.Language.Find(languageId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return db.Language.Find(languageId);
|
||||
}
|
||||
|
||||
public void DeleteLanguage(int languageId)
|
||||
{
|
||||
var language = _db.Language.Find(languageId);
|
||||
_db.Language.Remove(language);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var language = db.Language.Find(languageId);
|
||||
db.Language.Remove(language);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Oqtane.Models;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class LogRepository : ILogRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
|
||||
public LogRepository(TenantDBContext context)
|
||||
public LogRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Log> GetLogs(int siteId, string level, string function, int rows)
|
||||
|
@ -20,48 +23,51 @@ namespace Oqtane.Repository
|
|||
{
|
||||
if (function == null)
|
||||
{
|
||||
return _db.Log.Where(item => item.SiteId == siteId).
|
||||
return _queryContext.Log.Where(item => item.SiteId == siteId).
|
||||
OrderByDescending(item => item.LogDate).Take(rows);
|
||||
}
|
||||
|
||||
return _db.Log.Where(item => item.SiteId == siteId && item.Function == function).
|
||||
return _queryContext.Log.Where(item => item.SiteId == siteId && item.Function == function).
|
||||
OrderByDescending(item => item.LogDate).Take(rows);
|
||||
}
|
||||
|
||||
if (function == null)
|
||||
{
|
||||
return _db.Log.Where(item => item.SiteId == siteId && item.Level == level)
|
||||
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 && item.Function == function)
|
||||
return _queryContext.Log.Where(item => item.SiteId == siteId && item.Level == level && item.Function == function)
|
||||
.OrderByDescending(item => item.LogDate).Take(rows);
|
||||
}
|
||||
|
||||
public Log GetLog(int logId)
|
||||
{
|
||||
return _db.Log.Find(logId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return db.Log.Find(logId);
|
||||
}
|
||||
|
||||
public void AddLog(Log log)
|
||||
{
|
||||
_db.Log.Add(log);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Log.Add(log);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public int DeleteLogs(int siteId, int age)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
// delete logs in batches of 100 records
|
||||
int count = 0;
|
||||
var count = 0;
|
||||
var purgedate = DateTime.UtcNow.AddDays(-age);
|
||||
var logs = _db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate)
|
||||
var logs = db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate)
|
||||
.OrderBy(item => item.LogDate).Take(100).ToList();
|
||||
while (logs.Count > 0)
|
||||
{
|
||||
count += logs.Count;
|
||||
_db.Log.RemoveRange(logs);
|
||||
_db.SaveChanges();
|
||||
logs = _db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate)
|
||||
db.Log.RemoveRange(logs);
|
||||
db.SaveChanges();
|
||||
logs = db.Log.Where(item => item.SiteId == siteId && item.Level != "Error" && item.LogDate < purgedate)
|
||||
.OrderBy(item => item.LogDate).Take(100).ToList();
|
||||
}
|
||||
return count;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -8,25 +8,26 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class NotificationRepository : INotificationRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
|
||||
public NotificationRepository(TenantDBContext context)
|
||||
public NotificationRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
}
|
||||
|
||||
public IEnumerable<Notification> GetNotifications(int siteId, int fromUserId, int toUserId)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (toUserId == -1 && fromUserId == -1)
|
||||
{
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.IsDelivered == false && item.IsDeleted == false)
|
||||
.Where(item => item.SendOn == null || item.SendOn < System.DateTime.UtcNow)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.ToUserId == toUserId || toUserId == -1)
|
||||
.Where(item => item.FromUserId == fromUserId || fromUserId == -1)
|
||||
|
@ -35,9 +36,10 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<Notification> GetNotifications(int siteId, int fromUserId, int toUserId, int count, bool isRead)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (toUserId == -1 && fromUserId == -1)
|
||||
{
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.IsDelivered == false && item.IsDeleted == false)
|
||||
.Where(item => item.SendOn == null || item.SendOn < System.DateTime.UtcNow)
|
||||
|
@ -47,7 +49,7 @@ namespace Oqtane.Repository
|
|||
.Take(count);
|
||||
}
|
||||
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.ToUserId == toUserId || toUserId == -1)
|
||||
.Where(item => item.FromUserId == fromUserId || fromUserId == -1)
|
||||
|
@ -59,9 +61,10 @@ namespace Oqtane.Repository
|
|||
|
||||
public int GetNotificationCount(int siteId, int fromUserId, int toUserId, bool isRead)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (toUserId == -1 && fromUserId == -1)
|
||||
{
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.IsDelivered == false && item.IsDeleted == false)
|
||||
.Where(item => item.SendOn == null || item.SendOn < System.DateTime.UtcNow)
|
||||
|
@ -71,7 +74,7 @@ namespace Oqtane.Repository
|
|||
|
||||
}
|
||||
|
||||
return _db.Notification
|
||||
return db.Notification
|
||||
.Where(item => item.SiteId == siteId)
|
||||
.Where(item => item.ToUserId == toUserId || toUserId == -1)
|
||||
.Where(item => item.FromUserId == fromUserId || fromUserId == -1)
|
||||
|
@ -83,15 +86,17 @@ namespace Oqtane.Repository
|
|||
|
||||
public Notification AddNotification(Notification notification)
|
||||
{
|
||||
_db.Notification.Add(notification);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Notification.Add(notification);
|
||||
db.SaveChanges();
|
||||
return notification;
|
||||
}
|
||||
|
||||
public Notification UpdateNotification(Notification notification)
|
||||
{
|
||||
_db.Entry(notification).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(notification).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return notification;
|
||||
}
|
||||
public Notification GetNotification(int notificationId)
|
||||
|
@ -101,36 +106,39 @@ namespace Oqtane.Repository
|
|||
|
||||
public Notification GetNotification(int notificationId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.Notification.Find(notificationId);
|
||||
return db.Notification.Find(notificationId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.Notification.AsNoTracking().FirstOrDefault(item => item.NotificationId == notificationId);
|
||||
return db.Notification.AsNoTracking().FirstOrDefault(item => item.NotificationId == notificationId);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteNotification(int notificationId)
|
||||
{
|
||||
Notification notification = _db.Notification.Find(notificationId);
|
||||
_db.Notification.Remove(notification);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var notification = db.Notification.Find(notificationId);
|
||||
db.Notification.Remove(notification);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public int DeleteNotifications(int siteId, int age)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
// delete notifications in batches of 100 records
|
||||
int count = 0;
|
||||
var count = 0;
|
||||
var purgedate = DateTime.UtcNow.AddDays(-age);
|
||||
var notifications = _db.Notification.Where(item => item.SiteId == siteId && item.FromUserId == null && item.IsDelivered && item.DeliveredOn < purgedate)
|
||||
var notifications = db.Notification.Where(item => item.SiteId == siteId && item.FromUserId == null && item.IsDelivered && item.DeliveredOn < purgedate)
|
||||
.OrderBy(item => item.DeliveredOn).Take(100).ToList();
|
||||
while (notifications.Count > 0)
|
||||
{
|
||||
count += notifications.Count;
|
||||
_db.Notification.RemoveRange(notifications);
|
||||
_db.SaveChanges();
|
||||
notifications = _db.Notification.Where(item => item.SiteId == siteId && item.FromUserId == null && item.IsDelivered && item.DeliveredOn < purgedate)
|
||||
db.Notification.RemoveRange(notifications);
|
||||
db.SaveChanges();
|
||||
notifications = db.Notification.Where(item => item.SiteId == siteId && item.FromUserId == null && item.IsDelivered && item.DeliveredOn < purgedate)
|
||||
.OrderBy(item => item.DeliveredOn).Take(100).ToList();
|
||||
}
|
||||
return count;
|
||||
|
|
|
@ -27,8 +27,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<PageModule> GetPageModules(int siteId)
|
||||
{
|
||||
using(var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var pagemodules = db.PageModule
|
||||
.Include(item => item.Module) // eager load modules
|
||||
.Where(item => item.Module.SiteId == siteId).ToList();
|
||||
|
@ -44,27 +43,21 @@ namespace Oqtane.Repository
|
|||
return pagemodules;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public PageModule AddPageModule(PageModule pageModule)
|
||||
{
|
||||
using (var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.PageModule.Add(pageModule);
|
||||
db.SaveChanges();
|
||||
return pageModule;
|
||||
}
|
||||
}
|
||||
|
||||
public PageModule UpdatePageModule(PageModule pageModule)
|
||||
{
|
||||
using (var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(pageModule).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return pageModule;
|
||||
}
|
||||
}
|
||||
|
||||
public PageModule GetPageModule(int pageModuleId)
|
||||
{
|
||||
|
@ -73,8 +66,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public PageModule GetPageModule(int pageModuleId, bool tracking)
|
||||
{
|
||||
using (var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
PageModule pagemodule;
|
||||
if (tracking)
|
||||
{
|
||||
|
@ -94,13 +86,11 @@ namespace Oqtane.Repository
|
|||
}
|
||||
return pagemodule;
|
||||
}
|
||||
}
|
||||
|
||||
public PageModule GetPageModule(int pageId, int moduleId)
|
||||
{
|
||||
using (var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
PageModule pagemodule = db.PageModule.Include(item => item.Module) // eager load modules
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var pagemodule = db.PageModule.Include(item => item.Module) // eager load modules
|
||||
.SingleOrDefault(item => item.PageId == pageId && item.ModuleId == moduleId);
|
||||
if (pagemodule != null)
|
||||
{
|
||||
|
@ -110,13 +100,11 @@ namespace Oqtane.Repository
|
|||
}
|
||||
return pagemodule;
|
||||
}
|
||||
}
|
||||
|
||||
public void DeletePageModule(int pageModuleId)
|
||||
{
|
||||
using (var db = _dbContextFactory.CreateDbContext())
|
||||
{
|
||||
PageModule pageModule = db.PageModule.Include(item => item.Module) // eager load modules
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var pageModule = db.PageModule.Include(item => item.Module) // eager load modules
|
||||
.SingleOrDefault(item => item.PageModuleId == pageModuleId);
|
||||
_settings.DeleteSettings(EntityNames.PageModule, pageModuleId);
|
||||
db.PageModule.Remove(pageModule);
|
||||
|
@ -129,7 +117,6 @@ namespace Oqtane.Repository
|
|||
_modules.DeleteModule(pageModule.ModuleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private PageModule GetPageModule(PageModule pageModule, List<ModuleDefinition> moduleDefinitions, List<Permission> modulePermissions)
|
||||
{
|
||||
|
|
|
@ -9,14 +9,16 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class PageRepository : IPageRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IPageModuleRepository _pageModules;
|
||||
private readonly IPermissionRepository _permissions;
|
||||
private readonly ISettingRepository _settings;
|
||||
|
||||
public PageRepository(TenantDBContext context, IPageModuleRepository pageModules, IPermissionRepository permissions, ISettingRepository settings)
|
||||
public PageRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IPageModuleRepository pageModules, IPermissionRepository permissions, ISettingRepository settings)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
_pageModules = pageModules;
|
||||
_permissions = permissions;
|
||||
_settings = settings;
|
||||
|
@ -24,9 +26,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<Page> GetPages(int siteId)
|
||||
{
|
||||
IEnumerable<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.Page).ToList();
|
||||
IEnumerable<Page> pages = _db.Page.Where(item => item.SiteId == siteId && item.UserId == null);
|
||||
foreach(Page page in pages)
|
||||
var permissions = _permissions.GetPermissions(siteId, EntityNames.Page).ToList();
|
||||
var pages = _queryContext.Page.Where(item => item.SiteId == siteId && item.UserId == null);
|
||||
foreach (var page in pages)
|
||||
{
|
||||
page.PermissionList = permissions.Where(item => item.EntityId == page.PageId).ToList();
|
||||
}
|
||||
|
@ -35,16 +37,18 @@ namespace Oqtane.Repository
|
|||
|
||||
public Page AddPage(Page page)
|
||||
{
|
||||
_db.Page.Add(page);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Page.Add(page);
|
||||
db.SaveChanges();
|
||||
_permissions.UpdatePermissions(page.SiteId, EntityNames.Page, page.PageId, page.PermissionList);
|
||||
return page;
|
||||
}
|
||||
|
||||
public Page UpdatePage(Page page)
|
||||
{
|
||||
_db.Entry(page).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(page).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
_permissions.UpdatePermissions(page.SiteId, EntityNames.Page, page.PageId, page.PermissionList);
|
||||
return page;
|
||||
}
|
||||
|
@ -56,15 +60,16 @@ namespace Oqtane.Repository
|
|||
|
||||
public Page GetPage(int pageId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
Page page;
|
||||
if (tracking)
|
||||
{
|
||||
page = _db.Page.Find(pageId);
|
||||
page = db.Page.Find(pageId);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
page = _db.Page.AsNoTracking().FirstOrDefault(item => item.PageId == pageId);
|
||||
page = db.Page.AsNoTracking().FirstOrDefault(item => item.PageId == pageId);
|
||||
}
|
||||
if (page != null)
|
||||
{
|
||||
|
@ -75,7 +80,8 @@ namespace Oqtane.Repository
|
|||
|
||||
public Page GetPage(string path, int siteId)
|
||||
{
|
||||
Page page = _db.Page.FirstOrDefault(item => item.Path == path && item.SiteId == siteId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var page = db.Page.FirstOrDefault(item => item.Path == path && item.SiteId == siteId);
|
||||
if (page != null)
|
||||
{
|
||||
page.PermissionList = _permissions.GetPermissions(page.SiteId, EntityNames.Page, page.PageId)?.ToList();
|
||||
|
@ -85,18 +91,19 @@ namespace Oqtane.Repository
|
|||
|
||||
public void DeletePage(int pageId)
|
||||
{
|
||||
Page page = _db.Page.Find(pageId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var page = db.Page.Find(pageId);
|
||||
_permissions.DeletePermissions(page.SiteId, EntityNames.Page, pageId);
|
||||
_settings.DeleteSettings(EntityNames.Page, pageId);
|
||||
// remove page modules for page
|
||||
var pageModules = _db.PageModule.Where(item => item.PageId == pageId).ToList();
|
||||
var pageModules = db.PageModule.Where(item => item.PageId == pageId).ToList();
|
||||
foreach (var pageModule in pageModules)
|
||||
{
|
||||
_pageModules.DeletePageModule(pageModule.PageModuleId);
|
||||
}
|
||||
// must occur after page modules are deleted because of cascading delete relationship
|
||||
_db.Page.Remove(page);
|
||||
_db.SaveChanges();
|
||||
db.Page.Remove(page);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,14 +10,14 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class PermissionRepository : IPermissionRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly IRoleRepository _roles;
|
||||
private readonly IMemoryCache _cache;
|
||||
private readonly SiteState _siteState;
|
||||
|
||||
public PermissionRepository(TenantDBContext context, IRoleRepository roles, IMemoryCache cache, SiteState siteState)
|
||||
public PermissionRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IRoleRepository roles, IMemoryCache cache, SiteState siteState)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_roles = roles;
|
||||
_cache = cache;
|
||||
_siteState = siteState;
|
||||
|
@ -25,13 +25,14 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<Permission> GetPermissions(int siteId, string entityName)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var alias = _siteState?.Alias;
|
||||
if (alias != null)
|
||||
{
|
||||
return _cache.GetOrCreate($"permissions:{alias.TenantId}:{siteId}:{entityName}", entry =>
|
||||
{
|
||||
var roles = _roles.GetRoles(siteId, true).ToList();
|
||||
var permissions = _db.Permission.Where(item => item.SiteId == siteId).Where(item => item.EntityName == entityName).ToList();
|
||||
var permissions = db.Permission.Where(item => item.SiteId == siteId).Where(item => item.EntityName == entityName).ToList();
|
||||
foreach (var permission in permissions)
|
||||
{
|
||||
if (permission.RoleId != null && string.IsNullOrEmpty(permission.RoleName))
|
||||
|
@ -69,24 +70,27 @@ namespace Oqtane.Repository
|
|||
|
||||
public Permission AddPermission(Permission permission)
|
||||
{
|
||||
_db.Permission.Add(permission);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Permission.Add(permission);
|
||||
db.SaveChanges();
|
||||
ClearCache(permission.SiteId, permission.EntityName);
|
||||
return permission;
|
||||
}
|
||||
|
||||
public Permission UpdatePermission(Permission permission)
|
||||
{
|
||||
_db.Entry(permission).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(permission).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
ClearCache(permission.SiteId, permission.EntityName);
|
||||
return permission;
|
||||
}
|
||||
|
||||
public void UpdatePermissions(int siteId, string entityName, int entityId, List<Permission> permissions)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
// ensure permissions are fully populated
|
||||
List<Role> roles = _roles.GetRoles(siteId, true).ToList();
|
||||
var roles = _roles.GetRoles(siteId, true).ToList();
|
||||
foreach (var permission in permissions)
|
||||
{
|
||||
permission.SiteId = siteId;
|
||||
|
@ -115,13 +119,13 @@ namespace Oqtane.Repository
|
|||
if (current.IsAuthorized != permission.IsAuthorized)
|
||||
{
|
||||
current.IsAuthorized = permission.IsAuthorized;
|
||||
_db.Entry(current).State = EntityState.Modified;
|
||||
db.Entry(current).State = EntityState.Modified;
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_db.Permission.Add(permission);
|
||||
db.Permission.Add(permission);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
|
@ -131,13 +135,13 @@ namespace Oqtane.Repository
|
|||
if (!permissions.Any(item => item.EntityName == permission.EntityName && item.PermissionName == permission.PermissionName
|
||||
&& item.EntityId == permission.EntityId && item.RoleId == permission.RoleId && item.UserId == permission.UserId))
|
||||
{
|
||||
_db.Permission.Remove(permission);
|
||||
db.Permission.Remove(permission);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
if (modified)
|
||||
{
|
||||
_db.SaveChanges();
|
||||
db.SaveChanges();
|
||||
foreach (var entityname in permissions.Select(item => item.EntityName).Distinct())
|
||||
{
|
||||
ClearCache(siteId, entityname);
|
||||
|
@ -147,28 +151,31 @@ namespace Oqtane.Repository
|
|||
|
||||
public Permission GetPermission(int permissionId)
|
||||
{
|
||||
return _db.Permission.Find(permissionId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return db.Permission.Find(permissionId);
|
||||
}
|
||||
|
||||
public void DeletePermission(int permissionId)
|
||||
{
|
||||
Permission permission = _db.Permission.Find(permissionId);
|
||||
_db.Permission.Remove(permission);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var permission = db.Permission.Find(permissionId);
|
||||
db.Permission.Remove(permission);
|
||||
db.SaveChanges();
|
||||
ClearCache(permission.SiteId, permission.EntityName);
|
||||
}
|
||||
|
||||
public void DeletePermissions(int siteId, string entityName, int entityId)
|
||||
{
|
||||
IEnumerable<Permission> permissions = _db.Permission
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var permissions = db.Permission
|
||||
.Where(item => item.EntityName == entityName)
|
||||
.Where(item => item.EntityId == entityId)
|
||||
.Where(item => item.SiteId == siteId);
|
||||
foreach (Permission permission in permissions)
|
||||
{
|
||||
_db.Permission.Remove(permission);
|
||||
db.Permission.Remove(permission);
|
||||
}
|
||||
_db.SaveChanges();
|
||||
db.SaveChanges();
|
||||
ClearCache(siteId, entityName);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,29 +7,33 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class ProfileRepository : IProfileRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
|
||||
public ProfileRepository(TenantDBContext context)
|
||||
public ProfileRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Profile> GetProfiles(int siteId)
|
||||
{
|
||||
return _db.Profile.Where(item => item.SiteId == siteId || item.SiteId == null);
|
||||
return _queryContext.Profile.Where(item => item.SiteId == siteId || item.SiteId == null);
|
||||
}
|
||||
|
||||
public Profile AddProfile(Profile profile)
|
||||
{
|
||||
_db.Profile.Add(profile);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Profile.Add(profile);
|
||||
db.SaveChanges();
|
||||
return profile;
|
||||
}
|
||||
|
||||
public Profile UpdateProfile(Profile profile)
|
||||
{
|
||||
_db.Entry(profile).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(profile).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return profile;
|
||||
}
|
||||
|
||||
|
@ -40,21 +44,23 @@ namespace Oqtane.Repository
|
|||
|
||||
public Profile GetProfile(int profileId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.Profile.Find(profileId);
|
||||
return db.Profile.Find(profileId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.Profile.AsNoTracking().FirstOrDefault(item => item.ProfileId == profileId);
|
||||
return db.Profile.AsNoTracking().FirstOrDefault(item => item.ProfileId == profileId);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteProfile(int profileId)
|
||||
{
|
||||
Profile profile = _db.Profile.Find(profileId);
|
||||
_db.Profile.Remove(profile);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var profile = db.Profile.Find(profileId);
|
||||
db.Profile.Remove(profile);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,11 +7,13 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class RoleRepository : IRoleRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
|
||||
public RoleRepository(TenantDBContext context)
|
||||
public RoleRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Role> GetRoles(int siteId)
|
||||
|
@ -23,27 +25,29 @@ namespace Oqtane.Repository
|
|||
{
|
||||
if (includeGlobalRoles)
|
||||
{
|
||||
return _db.Role.Where(item => item.SiteId == siteId || item.SiteId == null);
|
||||
return _queryContext.Role.Where(item => item.SiteId == siteId || item.SiteId == null);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.Role.Where(item => item.SiteId == siteId);
|
||||
return _queryContext.Role.Where(item => item.SiteId == siteId);
|
||||
}
|
||||
}
|
||||
|
||||
public Role AddRole(Role role)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
role.Description = role.Description.Substring(0, (role.Description.Length > 256) ? 256 : role.Description.Length);
|
||||
_db.Role.Add(role);
|
||||
_db.SaveChanges();
|
||||
db.Role.Add(role);
|
||||
db.SaveChanges();
|
||||
return role;
|
||||
}
|
||||
|
||||
public Role UpdateRole(Role role)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
role.Description = role.Description.Substring(0, (role.Description.Length > 256) ? 256 : role.Description.Length);
|
||||
_db.Entry(role).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
db.Entry(role).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return role;
|
||||
}
|
||||
|
||||
|
@ -54,21 +58,23 @@ namespace Oqtane.Repository
|
|||
|
||||
public Role GetRole(int roleId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.Role.Find(roleId);
|
||||
return db.Role.Find(roleId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.Role.AsNoTracking().FirstOrDefault(item => item.RoleId == roleId);
|
||||
return db.Role.AsNoTracking().FirstOrDefault(item => item.RoleId == roleId);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteRole(int roleId)
|
||||
{
|
||||
Role role = _db.Role.Find(roleId);
|
||||
_db.Role.Remove(role);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
Role role = db.Role.Find(roleId);
|
||||
db.Role.Remove(role);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Internal;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Oqtane.Infrastructure;
|
||||
using Oqtane.Models;
|
||||
|
@ -10,14 +11,16 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class SettingRepository : ISettingRepository
|
||||
{
|
||||
private TenantDBContext _tenant;
|
||||
private readonly IDbContextFactory<TenantDBContext> _tenantContextFactory;
|
||||
private readonly TenantDBContext _tenantQueryContext;
|
||||
private MasterDBContext _master;
|
||||
private readonly ITenantManager _tenantManager;
|
||||
private readonly IMemoryCache _cache;
|
||||
|
||||
public SettingRepository(TenantDBContext tenant, MasterDBContext master, ITenantManager tenantManager, IMemoryCache cache)
|
||||
public SettingRepository(IDbContextFactory<TenantDBContext> tenantContextFactory, MasterDBContext master, ITenantManager tenantManager, IMemoryCache cache)
|
||||
{
|
||||
_tenant = tenant;
|
||||
_tenantContextFactory = tenantContextFactory;
|
||||
_tenantQueryContext = tenantContextFactory.CreateDbContext();
|
||||
_master = master;
|
||||
_tenantManager = tenantManager;
|
||||
_cache = cache;
|
||||
|
@ -31,7 +34,7 @@ namespace Oqtane.Repository
|
|||
}
|
||||
else
|
||||
{
|
||||
return _tenant.Setting.Where(item => item.EntityName == entityName);
|
||||
return _tenantQueryContext.Setting.Where(item => item.EntityName == entityName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,6 +46,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public Setting AddSetting(Setting setting)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(setting.EntityName))
|
||||
{
|
||||
_master.Setting.Add(setting);
|
||||
|
@ -50,8 +54,8 @@ namespace Oqtane.Repository
|
|||
}
|
||||
else
|
||||
{
|
||||
_tenant.Setting.Add(setting);
|
||||
_tenant.SaveChanges();
|
||||
tenant.Setting.Add(setting);
|
||||
tenant.SaveChanges();
|
||||
}
|
||||
ManageCache(setting.EntityName);
|
||||
return setting;
|
||||
|
@ -59,6 +63,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public Setting UpdateSetting(Setting setting)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(setting.EntityName))
|
||||
{
|
||||
_master.Entry(setting).State = EntityState.Modified;
|
||||
|
@ -66,8 +71,8 @@ namespace Oqtane.Repository
|
|||
}
|
||||
else
|
||||
{
|
||||
_tenant.Entry(setting).State = EntityState.Modified;
|
||||
_tenant.SaveChanges();
|
||||
tenant.Entry(setting).State = EntityState.Modified;
|
||||
tenant.SaveChanges();
|
||||
}
|
||||
ManageCache(setting.EntityName);
|
||||
return setting;
|
||||
|
@ -75,30 +80,33 @@ namespace Oqtane.Repository
|
|||
|
||||
public Setting GetSetting(string entityName, int settingId)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(entityName))
|
||||
{
|
||||
return _master.Setting.Find(settingId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _tenant.Setting.Find(settingId);
|
||||
return tenant.Setting.Find(settingId);
|
||||
}
|
||||
}
|
||||
|
||||
public Setting GetSetting(string entityName, int entityId, string settingName)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(entityName))
|
||||
{
|
||||
return _master.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault();
|
||||
}
|
||||
else
|
||||
{
|
||||
return _tenant.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault();
|
||||
return tenant.Setting.Where(item => item.EntityName == entityName && item.EntityId == entityId && item.SettingName == settingName).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteSetting(string entityName, int settingId)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(entityName))
|
||||
{
|
||||
Setting setting = _master.Setting.Find(settingId);
|
||||
|
@ -107,15 +115,16 @@ namespace Oqtane.Repository
|
|||
}
|
||||
else
|
||||
{
|
||||
Setting setting = _tenant.Setting.Find(settingId);
|
||||
_tenant.Setting.Remove(setting);
|
||||
_tenant.SaveChanges();
|
||||
Setting setting = tenant.Setting.Find(settingId);
|
||||
tenant.Setting.Remove(setting);
|
||||
tenant.SaveChanges();
|
||||
}
|
||||
ManageCache(entityName);
|
||||
}
|
||||
|
||||
public void DeleteSettings(string entityName, int entityId)
|
||||
{
|
||||
using var tenant = _tenantContextFactory.CreateDbContext();
|
||||
if (IsMaster(entityName))
|
||||
{
|
||||
IEnumerable<Setting> settings = _master.Setting
|
||||
|
@ -129,14 +138,14 @@ namespace Oqtane.Repository
|
|||
}
|
||||
else
|
||||
{
|
||||
IEnumerable<Setting> settings = _tenant.Setting
|
||||
IEnumerable<Setting> settings = tenant.Setting
|
||||
.Where(item => item.EntityName == entityName)
|
||||
.Where(item => item.EntityId == entityId);
|
||||
foreach (Setting setting in settings)
|
||||
{
|
||||
_tenant.Setting.Remove(setting);
|
||||
tenant.Setting.Remove(setting);
|
||||
}
|
||||
_tenant.SaveChanges();
|
||||
tenant.SaveChanges();
|
||||
}
|
||||
ManageCache(entityName);
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class SiteRepository : ISiteRepository
|
||||
{
|
||||
private readonly TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _factory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IRoleRepository _roleRepository;
|
||||
private readonly IProfileRepository _profileRepository;
|
||||
private readonly IFolderRepository _folderRepository;
|
||||
|
@ -33,12 +33,12 @@ namespace Oqtane.Repository
|
|||
private readonly ILogManager _logger;
|
||||
private static readonly object _lock = new object();
|
||||
|
||||
public SiteRepository(TenantDBContext context, IDbContextFactory<TenantDBContext> factory, IRoleRepository roleRepository, IProfileRepository profileRepository, IFolderRepository folderRepository, IPageRepository pageRepository,
|
||||
public SiteRepository(IDbContextFactory<TenantDBContext> factory, IRoleRepository roleRepository, IProfileRepository profileRepository, IFolderRepository folderRepository, IPageRepository pageRepository,
|
||||
IModuleRepository moduleRepository, IPageModuleRepository pageModuleRepository, IModuleDefinitionRepository moduleDefinitionRepository, IThemeRepository themeRepository, IServiceProvider serviceProvider,
|
||||
IConfigurationRoot config, IServerStateManager serverState, ILogManager logger)
|
||||
{
|
||||
_db = context;
|
||||
_factory = factory;
|
||||
_queryContext = _factory.CreateDbContext();
|
||||
_roleRepository = roleRepository;
|
||||
_profileRepository = profileRepository;
|
||||
_folderRepository = folderRepository;
|
||||
|
@ -107,22 +107,24 @@ namespace Oqtane.Repository
|
|||
// synchronous methods
|
||||
public IEnumerable<Site> GetSites()
|
||||
{
|
||||
return _db.Site.OrderBy(item => item.Name);
|
||||
return _queryContext.Site.OrderBy(item => item.Name);
|
||||
}
|
||||
|
||||
public Site AddSite(Site site)
|
||||
{
|
||||
using var ctx = _factory.CreateDbContext();
|
||||
site.SiteGuid = Guid.NewGuid().ToString();
|
||||
_db.Site.Add(site);
|
||||
_db.SaveChanges();
|
||||
ctx.Site.Add(site);
|
||||
ctx.SaveChanges();
|
||||
CreateSite(site);
|
||||
return site;
|
||||
}
|
||||
|
||||
public Site UpdateSite(Site site)
|
||||
{
|
||||
_db.Entry(site).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var ctx = _factory.CreateDbContext();
|
||||
ctx.Entry(site).State = EntityState.Modified;
|
||||
ctx.SaveChanges();
|
||||
return site;
|
||||
}
|
||||
|
||||
|
@ -133,21 +135,23 @@ namespace Oqtane.Repository
|
|||
|
||||
public Site GetSite(int siteId, bool tracking)
|
||||
{
|
||||
using var ctx = _factory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.Site.Find(siteId);
|
||||
return ctx.Site.Find(siteId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.Site.AsNoTracking().FirstOrDefault(item => item.SiteId == siteId);
|
||||
return ctx.Site.AsNoTracking().FirstOrDefault(item => item.SiteId == siteId);
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteSite(int siteId)
|
||||
{
|
||||
var site = _db.Site.Find(siteId);
|
||||
_db.Site.Remove(site);
|
||||
_db.SaveChanges();
|
||||
using var ctx = _factory.CreateDbContext();
|
||||
var site = ctx.Site.Find(siteId);
|
||||
ctx.Site.Remove(site);
|
||||
ctx.SaveChanges();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,12 +8,14 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class UrlMappingRepository : IUrlMappingRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly ISiteRepository _sites;
|
||||
|
||||
public UrlMappingRepository(TenantDBContext context, ISiteRepository sites)
|
||||
public UrlMappingRepository(IDbContextFactory<TenantDBContext> dbContextFactory, ISiteRepository sites)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
_sites = sites;
|
||||
}
|
||||
|
||||
|
@ -21,49 +23,54 @@ namespace Oqtane.Repository
|
|||
{
|
||||
if (isMapped)
|
||||
{
|
||||
return _db.UrlMapping.Where(item => item.SiteId == siteId && !string.IsNullOrEmpty(item.MappedUrl)).Take(200);
|
||||
return _queryContext.UrlMapping.Where(item => item.SiteId == siteId && !string.IsNullOrEmpty(item.MappedUrl)).Take(200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl)).Take(200);
|
||||
return _queryContext.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl)).Take(200);
|
||||
}
|
||||
}
|
||||
|
||||
public UrlMapping AddUrlMapping(UrlMapping urlMapping)
|
||||
{
|
||||
_db.UrlMapping.Add(urlMapping);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.UrlMapping.Add(urlMapping);
|
||||
db.SaveChanges();
|
||||
return urlMapping;
|
||||
}
|
||||
|
||||
public UrlMapping UpdateUrlMapping(UrlMapping urlMapping)
|
||||
{
|
||||
_db.Entry(urlMapping).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(urlMapping).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return urlMapping;
|
||||
}
|
||||
|
||||
public UrlMapping GetUrlMapping(int urlMappingId)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return GetUrlMapping(urlMappingId, true);
|
||||
}
|
||||
|
||||
public UrlMapping GetUrlMapping(int urlMappingId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.UrlMapping.Find(urlMappingId);
|
||||
return db.UrlMapping.Find(urlMappingId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.UrlMapping.AsNoTracking().FirstOrDefault(item => item.UrlMappingId == urlMappingId);
|
||||
return db.UrlMapping.AsNoTracking().FirstOrDefault(item => item.UrlMappingId == urlMappingId);
|
||||
}
|
||||
}
|
||||
|
||||
public UrlMapping GetUrlMapping(int siteId, string url)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
url = (url.Length > 750) ? url.Substring(0, 750) : url;
|
||||
var urlMapping = _db.UrlMapping.Where(item => item.SiteId == siteId && item.Url == url).FirstOrDefault();
|
||||
var urlMapping = db.UrlMapping.Where(item => item.SiteId == siteId && item.Url == url).FirstOrDefault();
|
||||
if (urlMapping == null)
|
||||
{
|
||||
var site = _sites.GetSite(siteId);
|
||||
|
@ -90,9 +97,10 @@ namespace Oqtane.Repository
|
|||
|
||||
public void DeleteUrlMapping(int urlMappingId)
|
||||
{
|
||||
UrlMapping urlMapping = _db.UrlMapping.Find(urlMappingId);
|
||||
_db.UrlMapping.Remove(urlMapping);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
UrlMapping urlMapping = db.UrlMapping.Find(urlMappingId);
|
||||
db.UrlMapping.Remove(urlMapping);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,14 +8,16 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class UserRepository : IUserRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IFolderRepository _folders;
|
||||
private readonly IRoleRepository _roles;
|
||||
private readonly IUserRoleRepository _userroles;
|
||||
|
||||
public UserRepository(TenantDBContext context, IFolderRepository folders, IRoleRepository roles, IUserRoleRepository userroles)
|
||||
public UserRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IFolderRepository folders, IRoleRepository roles, IUserRoleRepository userroles)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
_folders = folders;
|
||||
_roles = roles;
|
||||
_userroles = userroles;
|
||||
|
@ -23,25 +25,26 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<User> GetUsers()
|
||||
{
|
||||
return _db.User;
|
||||
return _queryContext.User;
|
||||
}
|
||||
|
||||
public User AddUser(User user)
|
||||
{
|
||||
if (_db.User.AsNoTracking().FirstOrDefault(item => item.Username == user.Username) == null)
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (db.User.AsNoTracking().FirstOrDefault(item => item.Username == user.Username) == null)
|
||||
{
|
||||
_db.User.Add(user);
|
||||
_db.SaveChanges();
|
||||
db.User.Add(user);
|
||||
db.SaveChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
int siteId = user.SiteId;
|
||||
user = _db.User.AsNoTracking().First(item => item.Username == user.Username);
|
||||
user = db.User.AsNoTracking().First(item => item.Username == user.Username);
|
||||
user.SiteId = siteId;
|
||||
}
|
||||
|
||||
// add folder for user
|
||||
Folder folder = _folders.GetFolder(user.SiteId, "Users/");
|
||||
var folder = _folders.GetFolder(user.SiteId, "Users/");
|
||||
if (folder != null)
|
||||
{
|
||||
_folders.AddFolder(new Folder
|
||||
|
@ -65,10 +68,10 @@ namespace Oqtane.Repository
|
|||
}
|
||||
|
||||
// add auto assigned roles to user for site
|
||||
List<Role> roles = _roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned).ToList();
|
||||
foreach (Role role in roles)
|
||||
var roles = _roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned).ToList();
|
||||
foreach (var role in roles)
|
||||
{
|
||||
UserRole userrole = new UserRole();
|
||||
var userrole = new UserRole();
|
||||
userrole.UserId = user.UserId;
|
||||
userrole.RoleId = role.RoleId;
|
||||
userrole.EffectiveDate = null;
|
||||
|
@ -81,8 +84,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public User UpdateUser(User user)
|
||||
{
|
||||
_db.Entry(user).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(user).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return user;
|
||||
}
|
||||
|
||||
|
@ -93,13 +97,14 @@ namespace Oqtane.Repository
|
|||
|
||||
public User GetUser(int userId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.User.Find(userId);
|
||||
return db.User.Find(userId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.User.AsNoTracking().FirstOrDefault(item => item.UserId == userId);
|
||||
return db.User.AsNoTracking().FirstOrDefault(item => item.UserId == userId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,23 +115,25 @@ namespace Oqtane.Repository
|
|||
|
||||
public User GetUser(string username, string email)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
User user = null;
|
||||
if (!string.IsNullOrEmpty(username))
|
||||
{
|
||||
user = _db.User.Where(item => item.Username == username).FirstOrDefault();
|
||||
user = db.User.Where(item => item.Username == username).FirstOrDefault();
|
||||
}
|
||||
if (user == null && !string.IsNullOrEmpty(email))
|
||||
{
|
||||
user = _db.User.Where(item => item.Email == email).FirstOrDefault();
|
||||
user = db.User.Where(item => item.Email == email).FirstOrDefault();
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
public void DeleteUser(int userId)
|
||||
{
|
||||
User user = _db.User.Find(userId);
|
||||
_db.User.Remove(user);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var user = db.User.Find(userId);
|
||||
db.User.Remove(user);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,18 +8,20 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class UserRoleRepository : IUserRoleRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
private readonly IRoleRepository _roles;
|
||||
|
||||
public UserRoleRepository(TenantDBContext context, IRoleRepository roles)
|
||||
public UserRoleRepository(IDbContextFactory<TenantDBContext> dbContextFactory, IRoleRepository roles)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
_roles = roles;
|
||||
}
|
||||
|
||||
public IEnumerable<UserRole> GetUserRoles(int siteId)
|
||||
{
|
||||
return _db.UserRole
|
||||
return _queryContext.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);
|
||||
|
@ -27,7 +29,7 @@ namespace Oqtane.Repository
|
|||
|
||||
public IEnumerable<UserRole> GetUserRoles(int userId, int siteId)
|
||||
{
|
||||
return _db.UserRole.Where(item => item.UserId == userId)
|
||||
return _queryContext.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);
|
||||
|
@ -35,8 +37,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public UserRole AddUserRole(UserRole userRole)
|
||||
{
|
||||
_db.UserRole.Add(userRole);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.UserRole.Add(userRole);
|
||||
db.SaveChanges();
|
||||
|
||||
// host roles can only exist at global level - remove any site specific user roles
|
||||
var role = _roles.GetRole(userRole.RoleId);
|
||||
|
@ -50,8 +53,9 @@ namespace Oqtane.Repository
|
|||
|
||||
public UserRole UpdateUserRole(UserRole userRole)
|
||||
{
|
||||
_db.Entry(userRole).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(userRole).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return userRole;
|
||||
}
|
||||
|
||||
|
@ -62,16 +66,17 @@ namespace Oqtane.Repository
|
|||
|
||||
public UserRole GetUserRole(int userRoleId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.UserRole
|
||||
return db.UserRole
|
||||
.Include(item => item.Role) // eager load roles
|
||||
.Include(item => item.User) // eager load users
|
||||
.FirstOrDefault(item => item.UserRoleId == userRoleId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.UserRole.AsNoTracking()
|
||||
return db.UserRole.AsNoTracking()
|
||||
.Include(item => item.Role) // eager load roles
|
||||
.Include(item => item.User) // eager load users
|
||||
.FirstOrDefault(item => item.UserRoleId == userRoleId);
|
||||
|
@ -85,16 +90,17 @@ namespace Oqtane.Repository
|
|||
|
||||
public UserRole GetUserRole(int userId, int roleId, bool tracking)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.UserRole
|
||||
return db.UserRole
|
||||
.Include(item => item.Role) // eager load roles
|
||||
.Include(item => item.User) // eager load users
|
||||
.FirstOrDefault(item => item.UserId == userId && item.RoleId == roleId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.UserRole.AsNoTracking()
|
||||
return db.UserRole.AsNoTracking()
|
||||
.Include(item => item.Role) // eager load roles
|
||||
.Include(item => item.User) // eager load users
|
||||
.FirstOrDefault(item => item.UserId == userId && item.RoleId == roleId);
|
||||
|
@ -103,18 +109,20 @@ namespace Oqtane.Repository
|
|||
|
||||
public void DeleteUserRole(int userRoleId)
|
||||
{
|
||||
UserRole userRole = _db.UserRole.Find(userRoleId);
|
||||
_db.UserRole.Remove(userRole);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var userRole = db.UserRole.Find(userRoleId);
|
||||
db.UserRole.Remove(userRole);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public void DeleteUserRoles(int userId)
|
||||
{
|
||||
foreach (UserRole userRole in _db.UserRole.Where(item => item.UserId == userId && item.Role.SiteId != null))
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
foreach (var userRole in db.UserRole.Where(item => item.UserId == userId && item.Role.SiteId != null))
|
||||
{
|
||||
_db.UserRole.Remove(userRole);
|
||||
db.UserRole.Remove(userRole);
|
||||
}
|
||||
_db.SaveChanges();
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,64 +8,72 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class VisitorRepository : IVisitorRepository
|
||||
{
|
||||
private TenantDBContext _db;
|
||||
private readonly IDbContextFactory<TenantDBContext> _dbContextFactory;
|
||||
private readonly TenantDBContext _queryContext;
|
||||
|
||||
public VisitorRepository(TenantDBContext context)
|
||||
public VisitorRepository(IDbContextFactory<TenantDBContext> dbContextFactory)
|
||||
{
|
||||
_db = context;
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_queryContext = _dbContextFactory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Visitor> GetVisitors(int siteId, DateTime fromDate)
|
||||
{
|
||||
return _db.Visitor.AsNoTracking()
|
||||
return _queryContext.Visitor.AsNoTracking()
|
||||
.Include(item => item.User) // eager load users
|
||||
.Where(item => item.SiteId == siteId && item.VisitedOn >= fromDate);
|
||||
}
|
||||
|
||||
public Visitor AddVisitor(Visitor visitor)
|
||||
{
|
||||
_db.Visitor.Add(visitor);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Visitor.Add(visitor);
|
||||
db.SaveChanges();
|
||||
return visitor;
|
||||
}
|
||||
|
||||
public Visitor UpdateVisitor(Visitor visitor)
|
||||
{
|
||||
_db.Entry(visitor).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
db.Entry(visitor).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return visitor;
|
||||
}
|
||||
|
||||
public Visitor GetVisitor(int visitorId)
|
||||
{
|
||||
return _db.Visitor.Find(visitorId);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return db.Visitor.Find(visitorId);
|
||||
}
|
||||
|
||||
public Visitor GetVisitor(int siteId, string IPAddress)
|
||||
{
|
||||
return _db.Visitor.FirstOrDefault(item => item.SiteId == siteId && item.IPAddress == IPAddress);
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
return db.Visitor.FirstOrDefault(item => item.SiteId == siteId && item.IPAddress == IPAddress);
|
||||
}
|
||||
|
||||
public void DeleteVisitor(int visitorId)
|
||||
{
|
||||
Visitor visitor = _db.Visitor.Find(visitorId);
|
||||
_db.Visitor.Remove(visitor);
|
||||
_db.SaveChanges();
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
var visitor = db.Visitor.Find(visitorId);
|
||||
db.Visitor.Remove(visitor);
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
public int DeleteVisitors(int siteId, int age)
|
||||
{
|
||||
using var db = _dbContextFactory.CreateDbContext();
|
||||
// delete visitors in batches of 100 records
|
||||
int count = 0;
|
||||
var count = 0;
|
||||
var purgedate = DateTime.UtcNow.AddDays(-age);
|
||||
var visitors = _db.Visitor.Where(item => item.SiteId == siteId && item.Visits < 2 && item.VisitedOn < purgedate)
|
||||
var visitors = db.Visitor.Where(item => item.SiteId == siteId && item.Visits < 2 && item.VisitedOn < purgedate)
|
||||
.OrderBy(item => item.VisitedOn).Take(100).ToList();
|
||||
while (visitors.Count > 0)
|
||||
{
|
||||
count += visitors.Count;
|
||||
_db.Visitor.RemoveRange(visitors);
|
||||
_db.SaveChanges();
|
||||
visitors = _db.Visitor.Where(item => item.SiteId == siteId && item.Visits < 2 && item.VisitedOn < purgedate)
|
||||
db.Visitor.RemoveRange(visitors);
|
||||
db.SaveChanges();
|
||||
visitors = db.Visitor.Where(item => item.SiteId == siteId && item.Visits < 2 && item.VisitedOn < purgedate)
|
||||
.OrderBy(item => item.VisitedOn).Take(100).ToList();
|
||||
}
|
||||
return count;
|
||||
|
|
|
@ -8,16 +8,18 @@ namespace [Owner].Module.[Module].Repository
|
|||
{
|
||||
public class [Module]Repository : I[Module]Repository, ITransientService
|
||||
{
|
||||
private readonly [Module]Context _db;
|
||||
private readonly IDbContextFactory<[Module]Context> _factory;
|
||||
private readonly [Module]Context _queryContext;
|
||||
|
||||
public [Module]Repository([Module]Context context)
|
||||
public [Module]Repository(IDbContextFactory<[Module]Context> factory)
|
||||
{
|
||||
_db = context;
|
||||
_factory = factory;
|
||||
_queryContext = _factory.CreateDbContext();
|
||||
}
|
||||
|
||||
public IEnumerable<Models.[Module]> Get[Module]s(int ModuleId)
|
||||
{
|
||||
return _db.[Module].Where(item => item.ModuleId == ModuleId);
|
||||
return _queryContext.[Module].Where(item => item.ModuleId == ModuleId);
|
||||
}
|
||||
|
||||
public Models.[Module] Get[Module](int [Module]Id)
|
||||
|
@ -27,35 +29,39 @@ namespace [Owner].Module.[Module].Repository
|
|||
|
||||
public Models.[Module] Get[Module](int [Module]Id, bool tracking)
|
||||
{
|
||||
using var db = _factory.CreateDbContext();
|
||||
if (tracking)
|
||||
{
|
||||
return _db.[Module].Find([Module]Id);
|
||||
return db.[Module].Find([Module]Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _db.[Module].AsNoTracking().FirstOrDefault(item => item.[Module]Id == [Module]Id);
|
||||
return db.[Module].AsNoTracking().FirstOrDefault(item => item.[Module]Id == [Module]Id);
|
||||
}
|
||||
}
|
||||
|
||||
public Models.[Module] Add[Module](Models.[Module] [Module])
|
||||
{
|
||||
_db.[Module].Add([Module]);
|
||||
_db.SaveChanges();
|
||||
using var db = _factory.CreateDbContext();
|
||||
db.[Module].Add([Module]);
|
||||
db.SaveChanges();
|
||||
return [Module];
|
||||
}
|
||||
|
||||
public Models.[Module] Update[Module](Models.[Module] [Module])
|
||||
{
|
||||
_db.Entry([Module]).State = EntityState.Modified;
|
||||
_db.SaveChanges();
|
||||
using var db = _factory.CreateDbContext();
|
||||
db.Entry([Module]).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return [Module];
|
||||
}
|
||||
|
||||
public void Delete[Module](int [Module]Id)
|
||||
{
|
||||
Models.[Module] [Module] = _db.[Module].Find([Module]Id);
|
||||
_db.[Module].Remove([Module]);
|
||||
_db.SaveChanges();
|
||||
using var db = _factory.CreateDbContext();
|
||||
Models.[Module] [Module] = db.[Module].Find([Module]Id);
|
||||
db.[Module].Remove([Module]);
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user