use DbContextFactory in SiteRepository
This commit is contained in:
parent
020fa4eefa
commit
1c31c1947c
|
@ -44,6 +44,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
{
|
{
|
||||||
services.AddDbContext<MasterDBContext>(options => { }, ServiceLifetime.Transient);
|
services.AddDbContext<MasterDBContext>(options => { }, ServiceLifetime.Transient);
|
||||||
services.AddDbContext<TenantDBContext>(options => { }, ServiceLifetime.Transient);
|
services.AddDbContext<TenantDBContext>(options => { }, ServiceLifetime.Transient);
|
||||||
|
services.AddDbContextFactory<TenantDBContext>(opt => { }, ServiceLifetime.Transient);
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +317,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
{
|
{
|
||||||
if (implementationType.Name == "HtmlTextContext")
|
if (implementationType.Name == "HtmlTextContext")
|
||||||
{
|
{
|
||||||
services.AddDbContextFactory<Oqtane.Modules.HtmlText.Repository.HtmlTextContext>(opt => { }, ServiceLifetime.Scoped);
|
services.AddDbContextFactory<Oqtane.Modules.HtmlText.Repository.HtmlTextContext>(opt => { }, ServiceLifetime.Transient);
|
||||||
}
|
}
|
||||||
// need a way to call AddDbContextFactory dynamically passing the implementationType
|
// need a way to call AddDbContextFactory dynamically passing the implementationType
|
||||||
//typeof(IServiceCollection)
|
//typeof(IServiceCollection)
|
||||||
|
|
|
@ -18,6 +18,7 @@ namespace Oqtane.Repository
|
||||||
public class SiteRepository : ISiteRepository
|
public class SiteRepository : ISiteRepository
|
||||||
{
|
{
|
||||||
private readonly TenantDBContext _db;
|
private readonly TenantDBContext _db;
|
||||||
|
private readonly IDbContextFactory<TenantDBContext> _factory;
|
||||||
private readonly IRoleRepository _roleRepository;
|
private readonly IRoleRepository _roleRepository;
|
||||||
private readonly IProfileRepository _profileRepository;
|
private readonly IProfileRepository _profileRepository;
|
||||||
private readonly IFolderRepository _folderRepository;
|
private readonly IFolderRepository _folderRepository;
|
||||||
|
@ -32,11 +33,12 @@ namespace Oqtane.Repository
|
||||||
private readonly ILogManager _logger;
|
private readonly ILogManager _logger;
|
||||||
private static readonly object _lock = new object();
|
private static readonly object _lock = new object();
|
||||||
|
|
||||||
public SiteRepository(TenantDBContext context, IRoleRepository roleRepository, IProfileRepository profileRepository, IFolderRepository folderRepository, IPageRepository pageRepository,
|
public SiteRepository(TenantDBContext context, IDbContextFactory<TenantDBContext> factory, IRoleRepository roleRepository, IProfileRepository profileRepository, IFolderRepository folderRepository, IPageRepository pageRepository,
|
||||||
IModuleRepository moduleRepository, IPageModuleRepository pageModuleRepository, IModuleDefinitionRepository moduleDefinitionRepository, IThemeRepository themeRepository, IServiceProvider serviceProvider,
|
IModuleRepository moduleRepository, IPageModuleRepository pageModuleRepository, IModuleDefinitionRepository moduleDefinitionRepository, IThemeRepository themeRepository, IServiceProvider serviceProvider,
|
||||||
IConfigurationRoot config, IServerStateManager serverState, ILogManager logger)
|
IConfigurationRoot config, IServerStateManager serverState, ILogManager logger)
|
||||||
{
|
{
|
||||||
_db = context;
|
_db = context;
|
||||||
|
_factory = factory;
|
||||||
_roleRepository = roleRepository;
|
_roleRepository = roleRepository;
|
||||||
_profileRepository = profileRepository;
|
_profileRepository = profileRepository;
|
||||||
_folderRepository = folderRepository;
|
_folderRepository = folderRepository;
|
||||||
|
@ -54,22 +56,25 @@ namespace Oqtane.Repository
|
||||||
// asynchronous methods
|
// asynchronous methods
|
||||||
public async Task<IEnumerable<Site>> GetSitesAsync()
|
public async Task<IEnumerable<Site>> GetSitesAsync()
|
||||||
{
|
{
|
||||||
return await _db.Site.OrderBy(item => item.Name).ToListAsync();
|
using var ctx = _factory.CreateDbContext();
|
||||||
|
return await ctx.Site.OrderBy(item => item.Name).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Site> AddSiteAsync(Site site)
|
public async Task<Site> AddSiteAsync(Site site)
|
||||||
{
|
{
|
||||||
site.SiteGuid = Guid.NewGuid().ToString();
|
site.SiteGuid = Guid.NewGuid().ToString();
|
||||||
_db.Site.Add(site);
|
using var ctx = _factory.CreateDbContext();
|
||||||
await _db.SaveChangesAsync();
|
ctx.Site.Add(site);
|
||||||
|
await ctx.SaveChangesAsync();
|
||||||
CreateSite(site);
|
CreateSite(site);
|
||||||
return site;
|
return site;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Site> UpdateSiteAsync(Site site)
|
public async Task<Site> UpdateSiteAsync(Site site)
|
||||||
{
|
{
|
||||||
_db.Entry(site).State = EntityState.Modified;
|
using var ctx = _factory.CreateDbContext();
|
||||||
await _db.SaveChangesAsync();
|
ctx.Entry(site).State = EntityState.Modified;
|
||||||
|
await ctx.SaveChangesAsync();
|
||||||
return site;
|
return site;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,21 +85,23 @@ namespace Oqtane.Repository
|
||||||
|
|
||||||
public async Task<Site> GetSiteAsync(int siteId, bool tracking)
|
public async Task<Site> GetSiteAsync(int siteId, bool tracking)
|
||||||
{
|
{
|
||||||
|
using var ctx = _factory.CreateDbContext();
|
||||||
if (tracking)
|
if (tracking)
|
||||||
{
|
{
|
||||||
return await _db.Site.FindAsync(siteId);
|
return await ctx.Site.FindAsync(siteId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return await _db.Site.AsNoTracking().FirstOrDefaultAsync(item => item.SiteId == siteId);
|
return await ctx.Site.AsNoTracking().FirstOrDefaultAsync(item => item.SiteId == siteId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task DeleteSiteAsync(int siteId)
|
public async Task DeleteSiteAsync(int siteId)
|
||||||
{
|
{
|
||||||
var site = _db.Site.Find(siteId);
|
using var ctx = _factory.CreateDbContext();
|
||||||
_db.Site.Remove(site);
|
var site = ctx.Site.Find(siteId);
|
||||||
await _db.SaveChangesAsync();
|
ctx.Site.Remove(site);
|
||||||
|
await ctx.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
// synchronous methods
|
// synchronous methods
|
||||||
|
|
Loading…
Reference in New Issue
Block a user