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

@ -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();
}