diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 6bc822ccd6..565d726cb2 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -45,6 +45,13 @@ namespace Umbraco.Core.Persistence.Repositories EnsureUniqueNaming = true; } + public void SetNoCachePolicy() + { + // using NoCache here means that we are NOT updating the cache + // so this should be OK for reads but NOT for writes! + CachePolicy = new NoCacheRepositoryCachePolicy(); + } + protected override ContentRepository Instance => this; public bool EnsureUniqueNaming { get; set; } diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 499c075a83..e0fdfb40a6 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -39,6 +39,13 @@ namespace Umbraco.Core.Persistence.Repositories EnsureUniqueNaming = contentSection.EnsureUniqueNaming; } + public void SetNoCachePolicy() + { + // using NoCache here means that we are NOT updating the cache + // so this should be OK for reads but NOT for writes! + CachePolicy = new NoCacheRepositoryCachePolicy(); + } + protected override MediaRepository Instance => this; public bool EnsureUniqueNaming { get; } diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index c0b5d1bf83..d643f90c62 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -39,6 +39,13 @@ namespace Umbraco.Core.Persistence.Repositories _memberGroupRepository = memberGroupRepository; } + public void SetNoCachePolicy() + { + // using NoCache here means that we are NOT updating the cache + // so this should be OK for reads but NOT for writes! + CachePolicy = new NoCacheRepositoryCachePolicy(); + } + protected override MemberRepository Instance => this; #region Overrides of RepositoryBase diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index be6f986a2e..de8ee024c3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -100,6 +100,10 @@ namespace Umbraco.Core.Persistence.Repositories return _cachePolicy; } + set + { + _cachePolicy = value; // ok to set to null, reverts to default + } } /// diff --git a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs index c0d6d2f2f5..de90b52856 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs @@ -1215,6 +1215,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); + ((ContentRepository) repository).SetNoCachePolicy(); var query = repository.Query; if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1284,6 +1285,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); + ((MediaRepository)repository).SetNoCachePolicy(); var query = repository.Query; if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1343,6 +1345,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); + ((MemberRepository)repository).SetNoCachePolicy(); var query = repository.Query; if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs index bfbf674f40..afd49afefc 100644 --- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs +++ b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs @@ -1807,6 +1807,7 @@ ORDER BY umbracoNode.level, umbracoNode.sortOrder"; { uow.WriteLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); + ((ContentRepository)repository).SetNoCachePolicy(); RebuildContentXmlLocked(uow, repository, groupSize, contentTypeIdsA); RebuildPreviewXmlLocked(uow, repository, groupSize, contentTypeIdsA); uow.Complete();