diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 0ed46c039c..6817d77459 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -53,68 +53,25 @@ namespace Umbraco.Core.Persistence.Repositories protected override ITemplate PerformGet(int id) { - var sql = GetBaseQuery(false); - sql.Where(GetBaseWhereClause(), new { Id = id }); - - var dto = Database.Fetch(sql).FirstOrDefault(); - - if (dto == null) - return null; - - string csViewName = string.Concat(dto.Alias, ".cshtml"); - string vbViewName = string.Concat(dto.Alias, ".vbhtml"); - string masterpageName = string.Concat(dto.Alias, ".master"); - - var factory = new TemplateFactory(); - var template = factory.BuildEntity(dto); - - if (dto.Master.HasValue) - { - var masterTemplate = Get(dto.Master.Value); - template.MasterTemplateAlias = masterTemplate.Alias; - template.MasterTemplateId = new Lazy(() => dto.Master.Value); - } - - if (_viewsFileSystem.FileExists(csViewName)) - { - PopulateViewTemplate(template, csViewName); - } - else if (_viewsFileSystem.FileExists(vbViewName)) - { - PopulateViewTemplate(template, vbViewName); - } - else - { - if (_masterpagesFileSystem.FileExists(masterpageName)) - { - PopulateMasterpageTemplate(template, masterpageName); - } - } - - //on initial construction we don't want to have dirty properties tracked - // http://issues.umbraco.org/issue/U4-1946 - template.ResetDirtyProperties(false); - - return template; + return GetAll(new[] {id}).FirstOrDefault(); } protected override IEnumerable PerformGetAll(params int[] ids) { + var sql = GetBaseQuery(false); + if (ids.Any()) { - foreach (var id in ids) - { - yield return Get(id); - } + sql.Where("umbracoNode.id in (@ids)", new {ids = ids}); } else { - var nodeDtos = Database.Fetch("WHERE nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); - foreach (var nodeDto in nodeDtos) - { - yield return Get(nodeDto.NodeId); - } + sql.Where(x => x.NodeObjectType == NodeObjectTypeId); } + + var dtos = Database.Fetch(sql); + + return dtos.Select(MapFromDto); } protected override IEnumerable PerformGetByQuery(IQuery query) @@ -125,10 +82,7 @@ namespace Umbraco.Core.Persistence.Repositories var dtos = Database.Fetch(sql); - foreach (var dto in dtos.DistinctBy(x => x.NodeId)) - { - yield return Get(dto.NodeId); - } + return dtos.Select(MapFromDto); } #endregion @@ -324,6 +278,47 @@ namespace Umbraco.Core.Persistence.Repositories #endregion + private ITemplate MapFromDto(TemplateDto dto) + { + string csViewName = string.Concat(dto.Alias, ".cshtml"); + string vbViewName = string.Concat(dto.Alias, ".vbhtml"); + string masterpageName = string.Concat(dto.Alias, ".master"); + + var factory = new TemplateFactory(); + var template = factory.BuildEntity(dto); + + if (dto.Master.HasValue) + { + //TODO: Fix this n+1 query! + var masterTemplate = Get(dto.Master.Value); + template.MasterTemplateAlias = masterTemplate.Alias; + template.MasterTemplateId = new Lazy(() => dto.Master.Value); + } + + if (_viewsFileSystem.FileExists(csViewName)) + { + PopulateViewTemplate(template, csViewName); + } + else if (_viewsFileSystem.FileExists(vbViewName)) + { + PopulateViewTemplate(template, vbViewName); + } + else + { + if (_masterpagesFileSystem.FileExists(masterpageName)) + { + PopulateMasterpageTemplate(template, masterpageName); + } + } + + //on initial construction we don't want to have dirty properties tracked + // http://issues.umbraco.org/issue/U4-1946 + template.ResetDirtyProperties(false); + + return template; + } + + private void PersistDeletedTemplate(TemplateDto dto) { //we need to get the real template for this item unfortunately to remove it diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs index 2cce4677c2..75f0be49c1 100644 --- a/src/Umbraco.Web/Editors/EntityController.cs +++ b/src/Umbraco.Web/Editors/EntityController.cs @@ -461,8 +461,9 @@ namespace Umbraco.Web.Editors { //TODO: Need to check for Object types that support hierarchic here, some might not. - return Services.EntityService.GetChildren(id, objectType.Value).Select(Mapper.Map) - .WhereNotNull(); + return Services.EntityService.GetChildren(id, objectType.Value) + .WhereNotNull() + .Select(Mapper.Map); } //now we need to convert the unknown ones switch (entityType) @@ -483,9 +484,11 @@ namespace Umbraco.Web.Editors { //TODO: Need to check for Object types that support hierarchic here, some might not. - var ids = Services.EntityService.Get(id).Path.Split(',').Select(int.Parse); - return ids.Select(m => Mapper.Map(Services.EntityService.Get(m, objectType.Value))) - .WhereNotNull(); + var ids = Services.EntityService.Get(id).Path.Split(',').Select(int.Parse).Distinct().ToArray(); + + return Services.EntityService.GetAll(objectType.Value, ids) + .WhereNotNull() + .Select(Mapper.Map); } //now we need to convert the unknown ones switch (entityType)