mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
#20909: Fix Content Manager Query Performance without Record
Work Item: 20909
This commit is contained in:
committed by
agriffard
parent
ccec5fd330
commit
12285abca8
@@ -1,5 +1,6 @@
|
|||||||
using Orchard.Caching;
|
using Orchard.Caching;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.MetaData;
|
||||||
using Orchard.DisplayManagement.Implementation;
|
using Orchard.DisplayManagement.Implementation;
|
||||||
using Orchard.Templates.Models;
|
using Orchard.Templates.Models;
|
||||||
using System;
|
using System;
|
||||||
@@ -15,17 +16,20 @@ namespace Orchard.Templates.Services {
|
|||||||
private ICacheManager _cacheManager;
|
private ICacheManager _cacheManager;
|
||||||
private ISignals _signals;
|
private ISignals _signals;
|
||||||
private IContentManager _contentManager;
|
private IContentManager _contentManager;
|
||||||
|
private IContentDefinitionManager _contentDefinitionManager;
|
||||||
private ITemplateService _templateService;
|
private ITemplateService _templateService;
|
||||||
|
|
||||||
public TemplateShapeBindingResolver(
|
public TemplateShapeBindingResolver(
|
||||||
ICacheManager cacheManager,
|
ICacheManager cacheManager,
|
||||||
ISignals signals,
|
ISignals signals,
|
||||||
IContentManager contentManager,
|
IContentManager contentManager,
|
||||||
|
IContentDefinitionManager contentDefinitionManager,
|
||||||
ITemplateService templateService
|
ITemplateService templateService
|
||||||
) {
|
) {
|
||||||
_cacheManager = cacheManager;
|
_cacheManager = cacheManager;
|
||||||
_signals = signals;
|
_signals = signals;
|
||||||
_contentManager = contentManager;
|
_contentManager = contentManager;
|
||||||
|
_contentDefinitionManager = contentDefinitionManager;
|
||||||
_templateService = templateService;
|
_templateService = templateService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +58,14 @@ namespace Orchard.Templates.Services {
|
|||||||
return _cacheManager.Get("Template.ShapeProcessors", ctx => {
|
return _cacheManager.Get("Template.ShapeProcessors", ctx => {
|
||||||
ctx.Monitor(_signals.When(DefaultTemplateService.TemplatesSignal));
|
ctx.Monitor(_signals.When(DefaultTemplateService.TemplatesSignal));
|
||||||
|
|
||||||
var allTemplates = _contentManager.Query<ShapePart>().List();
|
// select all name of types which contains ShapePart
|
||||||
|
var typesWithShapePart = _contentDefinitionManager
|
||||||
|
.ListTypeDefinitions()
|
||||||
|
.Where(ct => ct.Parts.Any(cp => cp.PartDefinition.Name == "ShapePart"))
|
||||||
|
.Select(ct => ct.Name)
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
var allTemplates = _contentManager.Query<ShapePart>(typesWithShapePart).List();
|
||||||
|
|
||||||
return allTemplates.Select(x => new TemplateResult {
|
return allTemplates.Select(x => new TemplateResult {
|
||||||
Name = x.Name,
|
Name = x.Name,
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ namespace Orchard.Widgets.Filters {
|
|||||||
|
|
||||||
// Once the Rule Engine is done:
|
// Once the Rule Engine is done:
|
||||||
// Get Layers and filter by zone and rule
|
// Get Layers and filter by zone and rule
|
||||||
|
// NOTE: .ForType("Layer") is faster than .Query<LayerPart, LayerPartRecord>()
|
||||||
IEnumerable<LayerPart> activeLayers = _orchardServices.ContentManager.Query<LayerPart>().ForType("Layer").List();
|
IEnumerable<LayerPart> activeLayers = _orchardServices.ContentManager.Query<LayerPart>().ForType("Layer").List();
|
||||||
|
|
||||||
var activeLayerIds = new List<int>();
|
var activeLayerIds = new List<int>();
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ namespace Orchard.Widgets.Services {
|
|||||||
|
|
||||||
public IEnumerable<WidgetPart> GetWidgets(int[] layerIds) {
|
public IEnumerable<WidgetPart> GetWidgets(int[] layerIds) {
|
||||||
return _contentManager
|
return _contentManager
|
||||||
.Query<WidgetPart>()
|
.Query<WidgetPart, WidgetPartRecord>()
|
||||||
.WithQueryHints(new QueryHints().ExpandParts<CommonPart>())
|
.WithQueryHints(new QueryHints().ExpandParts<CommonPart>())
|
||||||
.Where<CommonPartRecord>(x => layerIds.Contains(x.Container.Id))
|
.Where<CommonPartRecord>(x => layerIds.Contains(x.Container.Id))
|
||||||
.List();
|
.List();
|
||||||
|
|||||||
Reference in New Issue
Block a user