From 16f6bbcbd4ea7d8c4bd2f9a27183db93e338140d Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 13 Jun 2019 18:45:33 +1000 Subject: [PATCH] init commit of removing code for entity service that loads in any property data --- .../Implement/EntityRepository.cs | 166 +++++++-------- src/Umbraco.Core/Services/IEntityService.cs | 60 +----- src/Umbraco.Core/Services/IRelationService.cs | 21 +- .../Services/Implement/EntityService.cs | 197 +++++------------- .../Services/Implement/RelationService.cs | 34 ++- src/Umbraco.Tests/TestHelpers/TestObjects.cs | 6 +- .../Trees/ContentTreeController.cs | 6 +- .../Trees/ContentTreeControllerBase.cs | 8 +- src/Umbraco.Web/Trees/MediaTreeController.cs | 17 +- 9 files changed, 171 insertions(+), 344 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/EntityRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/EntityRepository.cs index b4c0e51c22..9983f97d70 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/EntityRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/EntityRepository.cs @@ -87,9 +87,9 @@ namespace Umbraco.Core.Persistence.Repositories.Implement if (isContent) BuildVariants(entities.Cast()); - // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - if (isMedia) - BuildProperties(entities, dtos.ToList()); + //// TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //if (isMedia) + // BuildProperties(entities, dtos.ToList()); return entities; } @@ -117,8 +117,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement var entity = BuildEntity(false, isMedia, dto); - if (isMedia) - BuildProperties(entity, dto); + //if (isMedia) + // BuildProperties(entity, dto); return entity; } @@ -162,7 +162,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement : PerformGetAll(objectType); } - private IEnumerable GetEntities(Sql sql, bool isContent, bool isMedia, bool loadMediaProperties) + private IEnumerable GetEntities(Sql sql, bool isContent, bool isMedia) { //isContent is going to return a 1:M result now with the variants so we need to do different things if (isContent) @@ -179,9 +179,9 @@ namespace Umbraco.Core.Persistence.Repositories.Implement var entities = dtos.Select(x => BuildEntity(false, isMedia, x)).ToArray(); - // TODO: See https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - if (isMedia && loadMediaProperties) - BuildProperties(entities, dtos); + //// TODO: See https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //if (isMedia && loadMediaProperties) + // BuildProperties(entities, dtos); return entities; } @@ -192,7 +192,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement var isMedia = objectType == Constants.ObjectTypes.Media; var sql = GetFullSqlForEntityType(isContent, isMedia, objectType, filter); - return GetEntities(sql, isContent, isMedia, true); + return GetEntities(sql, isContent, isMedia); } public IEnumerable GetAllPaths(Guid objectType, params int[] ids) @@ -238,23 +238,23 @@ namespace Umbraco.Core.Persistence.Repositories.Implement sql = translator.Translate(); sql = AddGroupBy(isContent, isMedia, sql, true); - return GetEntities(sql, isContent, isMedia, true); + return GetEntities(sql, isContent, isMedia); } - // TODO: See https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - internal IEnumerable GetMediaByQueryWithoutPropertyData(IQuery query) - { - var isContent = false; - var isMedia = true; + //// TODO: See https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //internal IEnumerable GetMediaByQueryWithoutPropertyData(IQuery query) + //{ + // var isContent = false; + // var isMedia = true; - var sql = GetBaseWhere(isContent, isMedia, false, null, Constants.ObjectTypes.Media); + // var sql = GetBaseWhere(isContent, isMedia, false, null, Constants.ObjectTypes.Media); - var translator = new SqlTranslator(sql, query); - sql = translator.Translate(); - sql = AddGroupBy(isContent, isMedia, sql, true); + // var translator = new SqlTranslator(sql, query); + // sql = translator.Translate(); + // sql = AddGroupBy(isContent, isMedia, sql, true); - return GetEntities(sql, isContent, isMedia, false); - } + // return GetEntities(sql, isContent, isMedia, false); + //} public UmbracoObjectTypes GetObjectType(int id) { @@ -280,40 +280,40 @@ namespace Umbraco.Core.Persistence.Repositories.Implement return Database.ExecuteScalar(sql) > 0; } - // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - private void BuildProperties(EntitySlim entity, BaseDto dto) - { - var pdtos = Database.Fetch(GetPropertyData(dto.VersionId)); - foreach (var pdto in pdtos) - BuildProperty(entity, pdto); - } + //// TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //private void BuildProperties(EntitySlim entity, BaseDto dto) + //{ + // var pdtos = Database.Fetch(GetPropertyData(dto.VersionId)); + // foreach (var pdto in pdtos) + // BuildProperty(entity, pdto); + //} - // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - private void BuildProperties(EntitySlim[] entities, List dtos) - { - var versionIds = dtos.Select(x => x.VersionId).Distinct().ToList(); - var pdtos = Database.FetchByGroups(versionIds, 2000, GetPropertyData); + //// TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //private void BuildProperties(EntitySlim[] entities, List dtos) + //{ + // var versionIds = dtos.Select(x => x.VersionId).Distinct().ToList(); + // var pdtos = Database.FetchByGroups(versionIds, 2000, GetPropertyData); - var xentity = entities.ToDictionary(x => x.Id, x => x); // nodeId -> entity - var xdto = dtos.ToDictionary(x => x.VersionId, x => x.NodeId); // versionId -> nodeId - foreach (var pdto in pdtos) - { - var nodeId = xdto[pdto.VersionId]; - var entity = xentity[nodeId]; - BuildProperty(entity, pdto); - } - } + // var xentity = entities.ToDictionary(x => x.Id, x => x); // nodeId -> entity + // var xdto = dtos.ToDictionary(x => x.VersionId, x => x.NodeId); // versionId -> nodeId + // foreach (var pdto in pdtos) + // { + // var nodeId = xdto[pdto.VersionId]; + // var entity = xentity[nodeId]; + // BuildProperty(entity, pdto); + // } + //} - // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - private void BuildProperty(EntitySlim entity, PropertyDataDto pdto) - { - // explain ?! - var value = string.IsNullOrWhiteSpace(pdto.TextValue) - ? pdto.VarcharValue - : pdto.TextValue.ConvertToJsonIfPossible(); + //// TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + //private void BuildProperty(EntitySlim entity, PropertyDataDto pdto) + //{ + // // explain ?! + // var value = string.IsNullOrWhiteSpace(pdto.TextValue) + // ? pdto.VarcharValue + // : pdto.TextValue.ConvertToJsonIfPossible(); - entity.AdditionalData[pdto.PropertyTypeDto.Alias] = new EntitySlim.PropertySlim(pdto.PropertyTypeDto.DataTypeDto.EditorAlias, value); - } + // entity.AdditionalData[pdto.PropertyTypeDto.Alias] = new EntitySlim.PropertySlim(pdto.PropertyTypeDto.DataTypeDto.EditorAlias, value); + //} private DocumentEntitySlim BuildVariants(DocumentEntitySlim entity) => BuildVariants(new[] { entity }).First(); @@ -400,26 +400,26 @@ namespace Umbraco.Core.Persistence.Repositories.Implement return AddGroupBy(isContent, isMedia, sql, true); } - private Sql GetPropertyData(int versionId) - { - return Sql() - .Select(r => r.Select(x => x.PropertyTypeDto, r1 => r1.Select(x => x.DataTypeDto))) - .From() - .InnerJoin().On((left, right) => left.PropertyTypeId == right.Id) - .InnerJoin().On((left, right) => left.DataTypeId == right.NodeId) - .Where(x => x.VersionId == versionId); - } + //private Sql GetPropertyData(int versionId) + //{ + // return Sql() + // .Select(r => r.Select(x => x.PropertyTypeDto, r1 => r1.Select(x => x.DataTypeDto))) + // .From() + // .InnerJoin().On((left, right) => left.PropertyTypeId == right.Id) + // .InnerJoin().On((left, right) => left.DataTypeId == right.NodeId) + // .Where(x => x.VersionId == versionId); + //} - private Sql GetPropertyData(IEnumerable versionIds) - { - return Sql() - .Select(r => r.Select(x => x.PropertyTypeDto, r1 => r1.Select(x => x.DataTypeDto))) - .From() - .InnerJoin().On((left, right) => left.PropertyTypeId == right.Id) - .InnerJoin().On((left, right) => left.DataTypeId == right.NodeId) - .WhereIn(x => x.VersionId, versionIds) - .OrderBy(x => x.VersionId); - } + //private Sql GetPropertyData(IEnumerable versionIds) + //{ + // return Sql() + // .Select(r => r.Select(x => x.PropertyTypeDto, r1 => r1.Select(x => x.DataTypeDto))) + // .From() + // .InnerJoin().On((left, right) => left.PropertyTypeId == right.Id) + // .InnerJoin().On((left, right) => left.DataTypeId == right.NodeId) + // .WhereIn(x => x.VersionId, versionIds) + // .OrderBy(x => x.VersionId); + //} // gets the base SELECT + FROM [+ filter] sql // always from the 'current' content version @@ -566,21 +566,21 @@ namespace Umbraco.Core.Persistence.Repositories.Implement #region Classes - [ExplicitColumns] - internal class UmbracoPropertyDto - { - [Column("propertyEditorAlias")] - public string PropertyEditorAlias { get; set; } + //[ExplicitColumns] + //internal class UmbracoPropertyDto + //{ + // [Column("propertyEditorAlias")] + // public string PropertyEditorAlias { get; set; } - [Column("propertyTypeAlias")] - public string PropertyAlias { get; set; } + // [Column("propertyTypeAlias")] + // public string PropertyAlias { get; set; } - [Column("varcharValue")] - public string VarcharValue { get; set; } + // [Column("varcharValue")] + // public string VarcharValue { get; set; } - [Column("textValue")] - public string TextValue { get; set; } - } + // [Column("textValue")] + // public string TextValue { get; set; } + //} /// diff --git a/src/Umbraco.Core/Services/IEntityService.cs b/src/Umbraco.Core/Services/IEntityService.cs index 9d0399f324..f03bc640ec 100644 --- a/src/Umbraco.Core/Services/IEntityService.cs +++ b/src/Umbraco.Core/Services/IEntityService.cs @@ -15,92 +15,40 @@ namespace Umbraco.Core.Services /// The identifier of the entity. IEntitySlim Get(int id); - /// - /// Gets an entity. - /// - /// The identifier of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(int id, bool full); - /// /// Gets an entity. /// /// The unique key of the entity. IEntitySlim Get(Guid key); - /// - /// Gets an entity. - /// - /// The unique key of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(Guid key, bool full); - /// /// Gets an entity. /// /// The identifier of the entity. /// The object type of the entity. IEntitySlim Get(int id, UmbracoObjectTypes objectType); - - /// - /// Gets an entity. - /// - /// The identifier of the entity. - /// The object type of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(int id, UmbracoObjectTypes objectType, bool full); - + /// /// Gets an entity. /// /// The unique key of the entity. /// The object type of the entity. IEntitySlim Get(Guid key, UmbracoObjectTypes objectType); - - /// - /// Gets an entity. - /// - /// The unique key of the entity. - /// The object type of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(Guid key, UmbracoObjectTypes objectType, bool full); - + /// /// Gets an entity. /// /// The type used to determine the object type of the entity. /// The identifier of the entity. IEntitySlim Get(int id) where T : IUmbracoEntity; - - /// - /// Gets an entity. - /// - /// The type used to determine the object type of the entity. - /// The identifier of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(int id, bool full) where T : IUmbracoEntity; - + /// /// Gets an entity. /// /// The type used to determine the object type of the entity. /// The unique key of the entity. IEntitySlim Get(Guid key) where T : IUmbracoEntity; - - /// - /// Gets an entity. - /// - /// The type used to determine the object type of the entity. - /// The unique key of the entity. - /// A value indicating whether to load a light entity, or the full entity. - /// Returns either a , or an actual entity, depending on . - IUmbracoEntity Get(Guid key, bool full) where T : IUmbracoEntity; - + /// /// Determines whether an entity exists. /// diff --git a/src/Umbraco.Core/Services/IRelationService.cs b/src/Umbraco.Core/Services/IRelationService.cs index e2733a311d..ef22632d6e 100644 --- a/src/Umbraco.Core/Services/IRelationService.cs +++ b/src/Umbraco.Core/Services/IRelationService.cs @@ -142,52 +142,43 @@ namespace Umbraco.Core.Services /// Gets the Child object from a Relation as an /// /// Relation to retrieve child object from - /// Optional bool to load the complete object graph when set to False /// An - IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false); + IUmbracoEntity GetChildEntityFromRelation(IRelation relation); /// /// Gets the Parent object from a Relation as an /// /// Relation to retrieve parent object from - /// Optional bool to load the complete object graph when set to False /// An - IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false); + IUmbracoEntity GetParentEntityFromRelation(IRelation relation); /// /// Gets the Parent and Child objects from a Relation as a "/> with . /// /// Relation to retrieve parent and child object from - /// Optional bool to load the complete object graph when set to False /// Returns a Tuple with Parent (item1) and Child (item2) - Tuple GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false); + Tuple GetEntitiesFromRelation(IRelation relation); /// /// Gets the Child objects from a list of Relations as a list of objects. /// /// List of relations to retrieve child objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of - IEnumerable GetChildEntitiesFromRelations(IEnumerable relations, bool loadBaseType = false); + IEnumerable GetChildEntitiesFromRelations(IEnumerable relations); /// /// Gets the Parent objects from a list of Relations as a list of objects. /// /// List of relations to retrieve parent objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of - IEnumerable GetParentEntitiesFromRelations(IEnumerable relations, - bool loadBaseType = false); + IEnumerable GetParentEntitiesFromRelations(IEnumerable relations); /// /// Gets the Parent and Child objects from a list of Relations as a list of objects. /// /// List of relations to retrieve parent and child objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of with - IEnumerable> GetEntitiesFromRelations( - IEnumerable relations, - bool loadBaseType = false); + IEnumerable> GetEntitiesFromRelations(IEnumerable relations); /// /// Relates two objects by their entity Ids. diff --git a/src/Umbraco.Core/Services/Implement/EntityService.cs b/src/Umbraco.Core/Services/Implement/EntityService.cs index 00edde48f3..f8317dbd23 100644 --- a/src/Umbraco.Core/Services/Implement/EntityService.cs +++ b/src/Umbraco.Core/Services/Implement/EntityService.cs @@ -19,30 +19,25 @@ namespace Umbraco.Core.Services.Implement public class EntityService : ScopeRepositoryService, IEntityService { private readonly IEntityRepository _entityRepository; - private readonly Dictionary GetById, Func GetByKey)> _objectTypes; + private readonly Dictionary _objectTypes; private IQuery _queryRootEntity; private readonly IdkMap _idkMap; - public EntityService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory, - IContentService contentService, IContentTypeService contentTypeService, - IMediaService mediaService, IMediaTypeService mediaTypeService, - IDataTypeService dataTypeService, - IMemberService memberService, IMemberTypeService memberTypeService, IdkMap idkMap, - IEntityRepository entityRepository) + public EntityService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory, IdkMap idkMap, IEntityRepository entityRepository) : base(provider, logger, eventMessagesFactory) { _idkMap = idkMap; _entityRepository = entityRepository; - _objectTypes = new Dictionary, Func)> + _objectTypes = new Dictionary { - { typeof (IDataType).FullName, (UmbracoObjectTypes.DataType, dataTypeService.GetDataType, dataTypeService.GetDataType) }, - { typeof (IContent).FullName, (UmbracoObjectTypes.Document, contentService.GetById, contentService.GetById) }, - { typeof (IContentType).FullName, (UmbracoObjectTypes.DocumentType, contentTypeService.Get, contentTypeService.Get) }, - { typeof (IMedia).FullName, (UmbracoObjectTypes.Media, mediaService.GetById, mediaService.GetById) }, - { typeof (IMediaType).FullName, (UmbracoObjectTypes.MediaType, mediaTypeService.Get, mediaTypeService.Get) }, - { typeof (IMember).FullName, (UmbracoObjectTypes.Member, memberService.GetById, memberService.GetByKey) }, - { typeof (IMemberType).FullName, (UmbracoObjectTypes.MemberType, memberTypeService.Get, memberTypeService.Get) }, + { typeof (IDataType).FullName, UmbracoObjectTypes.DataType }, + { typeof (IContent).FullName, UmbracoObjectTypes.Document }, + { typeof (IContentType).FullName, UmbracoObjectTypes.DocumentType }, + { typeof (IMedia).FullName, UmbracoObjectTypes.Media }, + { typeof (IMediaType).FullName, UmbracoObjectTypes.MediaType }, + { typeof (IMember).FullName, UmbracoObjectTypes.Member }, + { typeof (IMemberType).FullName, UmbracoObjectTypes.MemberType }, }; } @@ -54,162 +49,68 @@ namespace Umbraco.Core.Services.Implement #endregion - // gets the getters, throws if not supported - private (UmbracoObjectTypes ObjectType, Func GetById, Func GetByKey) GetGetters(Type type) + // gets the object type, throws if not supported + private UmbracoObjectTypes GetObjectType(Type type) { - if (type?.FullName == null || !_objectTypes.TryGetValue(type.FullName, out var getters)) + if (type?.FullName == null || !_objectTypes.TryGetValue(type.FullName, out var objType)) throw new NotSupportedException($"Type \"{type?.FullName ?? ""}\" is not supported here."); - return getters; + return objType; } /// public IEntitySlim Get(int id) { - return (IEntitySlim) Get(id, false); - } - - /// - public IUmbracoEntity Get(int id, bool full) - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(id); - } + return _entityRepository.Get(id); } - - // get the full entity - var objectType = GetObjectType(id); - var entityType = objectType.GetClrType(); - var getters = GetGetters(entityType); - return getters.GetById(id); } /// public IEntitySlim Get(Guid key) { - return (IEntitySlim) Get(key, false); - } - - /// - public IUmbracoEntity Get(Guid key, bool full) - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(key); - } + return _entityRepository.Get(key); } - - // get the full entity - var objectType = GetObjectType(key); - var entityType = objectType.GetClrType(); - var getters = GetGetters(entityType); - return getters.GetByKey(key); } /// public virtual IEntitySlim Get(int id, UmbracoObjectTypes objectType) { - return (IEntitySlim) Get(id, objectType, false); - } - - /// - public virtual IUmbracoEntity Get(int id, UmbracoObjectTypes objectType, bool full) - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(id, objectType.GetGuid()); - } + return _entityRepository.Get(id, objectType.GetGuid()); } - - // get the full entity - var entityType = objectType.GetClrType(); - var getters = GetGetters(entityType); - return getters.GetById(id); } /// public IEntitySlim Get(Guid key, UmbracoObjectTypes objectType) { - return (IEntitySlim) Get(key, objectType, false); - } - - /// - public IUmbracoEntity Get(Guid key, UmbracoObjectTypes objectType, bool full) - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(key, objectType.GetGuid()); - } + return _entityRepository.Get(key, objectType.GetGuid()); } - - // get the full entity - var entityType = objectType.GetClrType(); - var getters = GetGetters(entityType); - return getters.GetByKey(key); } /// public virtual IEntitySlim Get(int id) where T : IUmbracoEntity { - return (IEntitySlim) Get(id, false); - } - - /// - public virtual IUmbracoEntity Get(int id, bool full) - where T : IUmbracoEntity - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(id); - } + return _entityRepository.Get(id); } - - // get the full entity - var entityType = typeof (T); - var getters = GetGetters(entityType); - return getters.GetById(id); } /// public virtual IEntitySlim Get(Guid key) where T : IUmbracoEntity { - return (IEntitySlim) Get(key, false); - } - - /// - public IUmbracoEntity Get(Guid key, bool full) - where T : IUmbracoEntity - { - if (!full) + using (ScopeProvider.CreateScope(autoComplete: true)) { - // get the light entity - using (ScopeProvider.CreateScope(autoComplete: true)) - { - return _entityRepository.Get(key); - } + return _entityRepository.Get(key); } - - // get the full entity - var entityType = typeof (T); - var getters = GetGetters(entityType); - return getters.GetByKey(key); } /// @@ -240,8 +141,7 @@ namespace Umbraco.Core.Services.Implement where T : IUmbracoEntity { var entityType = typeof (T); - var getters = GetGetters(entityType); - var objectType = getters.ObjectType; + var objectType = GetObjectType(entityType); var objectTypeId = objectType.GetGuid(); using (ScopeProvider.CreateScope(autoComplete: true)) @@ -261,7 +161,7 @@ namespace Umbraco.Core.Services.Implement if (entityType == null) throw new NotSupportedException($"Type \"{objectType}\" is not supported here."); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { @@ -277,7 +177,7 @@ namespace Umbraco.Core.Services.Implement public virtual IEnumerable GetAll(Guid objectType, params int[] ids) { var entityType = ObjectTypes.GetClrType(objectType); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { @@ -290,8 +190,7 @@ namespace Umbraco.Core.Services.Implement where T : IUmbracoEntity { var entityType = typeof (T); - var getters = GetGetters(entityType); - var objectType = getters.ObjectType; + var objectType = GetObjectType(entityType); var objectTypeId = objectType.GetGuid(); using (ScopeProvider.CreateScope(autoComplete: true)) @@ -304,7 +203,7 @@ namespace Umbraco.Core.Services.Implement public IEnumerable GetAll(UmbracoObjectTypes objectType, Guid[] keys) { var entityType = objectType.GetClrType(); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { @@ -316,7 +215,7 @@ namespace Umbraco.Core.Services.Implement public virtual IEnumerable GetAll(Guid objectType, params Guid[] keys) { var entityType = ObjectTypes.GetClrType(objectType); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { @@ -377,21 +276,21 @@ namespace Umbraco.Core.Services.Implement } } - /// - /// Gets a collection of children by the parent's Id and UmbracoObjectType without adding property data - /// - /// Id of the parent to retrieve children for - /// An enumerable list of objects - internal IEnumerable GetMediaChildrenWithoutPropertyData(int parentId) - { - using (ScopeProvider.CreateScope(autoComplete: true)) - { - var query = Query().Where(x => x.ParentId == parentId); + ///// + ///// Gets a collection of children by the parent's Id and UmbracoObjectType without adding property data + ///// + ///// Id of the parent to retrieve children for + ///// An enumerable list of objects + //internal IEnumerable GetMediaChildrenWithoutPropertyData(int parentId) + //{ + // using (ScopeProvider.CreateScope(autoComplete: true)) + // { + // var query = Query().Where(x => x.ParentId == parentId); - // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media - return ((EntityRepository)_entityRepository).GetMediaByQueryWithoutPropertyData(query); - } - } + // // TODO: see https://github.com/umbraco/Umbraco-CMS/pull/3460#issuecomment-434903930 we need to not load any property data at all for media + // return ((EntityRepository)_entityRepository).GetMediaByQueryWithoutPropertyData(query); + // } + //} /// public virtual IEnumerable GetDescendants(int id) @@ -578,7 +477,7 @@ namespace Umbraco.Core.Services.Implement public virtual IEnumerable GetAllPaths(UmbracoObjectTypes objectType, params int[] ids) { var entityType = objectType.GetClrType(); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { @@ -590,7 +489,7 @@ namespace Umbraco.Core.Services.Implement public virtual IEnumerable GetAllPaths(UmbracoObjectTypes objectType, params Guid[] keys) { var entityType = objectType.GetClrType(); - GetGetters(entityType); + GetObjectType(entityType); using (ScopeProvider.CreateScope(autoComplete: true)) { diff --git a/src/Umbraco.Core/Services/Implement/RelationService.cs b/src/Umbraco.Core/Services/Implement/RelationService.cs index a316d04f8e..405c3a2800 100644 --- a/src/Umbraco.Core/Services/Implement/RelationService.cs +++ b/src/Umbraco.Core/Services/Implement/RelationService.cs @@ -285,39 +285,36 @@ namespace Umbraco.Core.Services.Implement /// Gets the Child object from a Relation as an /// /// Relation to retrieve child object from - /// Optional bool to load the complete object graph when set to False /// An - public IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false) + public IUmbracoEntity GetChildEntityFromRelation(IRelation relation) { var objectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ChildObjectType); - return _entityService.Get(relation.ChildId, objectType, loadBaseType); + return _entityService.Get(relation.ChildId, objectType); } /// /// Gets the Parent object from a Relation as an /// /// Relation to retrieve parent object from - /// Optional bool to load the complete object graph when set to False /// An - public IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false) + public IUmbracoEntity GetParentEntityFromRelation(IRelation relation) { var objectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ParentObjectType); - return _entityService.Get(relation.ParentId, objectType, loadBaseType); + return _entityService.Get(relation.ParentId, objectType); } /// /// Gets the Parent and Child objects from a Relation as a "/> with . /// /// Relation to retrieve parent and child object from - /// Optional bool to load the complete object graph when set to False /// Returns a Tuple with Parent (item1) and Child (item2) - public Tuple GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false) + public Tuple GetEntitiesFromRelation(IRelation relation) { var childObjectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var parentObjectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ParentObjectType); - var child = _entityService.Get(relation.ChildId, childObjectType, loadBaseType); - var parent = _entityService.Get(relation.ParentId, parentObjectType, loadBaseType); + var child = _entityService.Get(relation.ChildId, childObjectType); + var parent = _entityService.Get(relation.ParentId, parentObjectType); return new Tuple(parent, child); } @@ -326,14 +323,13 @@ namespace Umbraco.Core.Services.Implement /// Gets the Child objects from a list of Relations as a list of objects. /// /// List of relations to retrieve child objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of - public IEnumerable GetChildEntitiesFromRelations(IEnumerable relations, bool loadBaseType = false) + public IEnumerable GetChildEntitiesFromRelations(IEnumerable relations) { foreach (var relation in relations) { var objectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ChildObjectType); - yield return _entityService.Get(relation.ChildId, objectType, loadBaseType); + yield return _entityService.Get(relation.ChildId, objectType); } } @@ -341,14 +337,13 @@ namespace Umbraco.Core.Services.Implement /// Gets the Parent objects from a list of Relations as a list of objects. /// /// List of relations to retrieve parent objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of - public IEnumerable GetParentEntitiesFromRelations(IEnumerable relations, bool loadBaseType = false) + public IEnumerable GetParentEntitiesFromRelations(IEnumerable relations) { foreach (var relation in relations) { var objectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ParentObjectType); - yield return _entityService.Get(relation.ParentId, objectType, loadBaseType); + yield return _entityService.Get(relation.ParentId, objectType); } } @@ -356,17 +351,16 @@ namespace Umbraco.Core.Services.Implement /// Gets the Parent and Child objects from a list of Relations as a list of objects. /// /// List of relations to retrieve parent and child objects from - /// Optional bool to load the complete object graph when set to False /// An enumerable list of with - public IEnumerable> GetEntitiesFromRelations(IEnumerable relations, bool loadBaseType = false) + public IEnumerable> GetEntitiesFromRelations(IEnumerable relations) { foreach (var relation in relations) { var childObjectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var parentObjectType = ObjectTypes.GetUmbracoObjectType(relation.RelationType.ParentObjectType); - var child = _entityService.Get(relation.ChildId, childObjectType, loadBaseType); - var parent = _entityService.Get(relation.ParentId, parentObjectType, loadBaseType); + var child = _entityService.Get(relation.ChildId, childObjectType); + var parent = _entityService.Get(relation.ParentId, parentObjectType); yield return new Tuple(parent, child); } diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 110accdecf..31d11952ef 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -164,11 +164,7 @@ namespace Umbraco.Tests.TestHelpers var fileService = GetLazyService(factory, c => new FileService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var memberTypeService = GetLazyService(factory, c => new MemberTypeService(scopeProvider, logger, eventMessagesFactory, memberService.Value, GetRepo(c), GetRepo(c), GetRepo(c))); - var entityService = GetLazyService(factory, c => new EntityService( - scopeProvider, logger, eventMessagesFactory, - contentService.Value, contentTypeService.Value, mediaService.Value, mediaTypeService.Value, dataTypeService.Value, memberService.Value, memberTypeService.Value, - idkMap, - GetRepo(c))); + var entityService = GetLazyService(factory, c => new EntityService(scopeProvider, logger, eventMessagesFactory, idkMap, GetRepo(c))); var macroService = GetLazyService(factory, c => new MacroService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c))); var packagingService = GetLazyService(factory, c => diff --git a/src/Umbraco.Web/Trees/ContentTreeController.cs b/src/Umbraco.Web/Trees/ContentTreeController.cs index 748c97c522..ef9f57e7e1 100644 --- a/src/Umbraco.Web/Trees/ContentTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTreeController.cs @@ -201,8 +201,8 @@ namespace Umbraco.Web.Trees return HasPathAccess(entity, queryStrings); } - internal override IEnumerable GetChildrenFromEntityService(int entityId) - => Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList(); + //internal override IEnumerable GetChildrenFromEntityService(int entityId) + // => Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList(); protected override IEnumerable GetChildEntities(string id, FormDataCollection queryStrings) { @@ -327,7 +327,7 @@ namespace Umbraco.Web.Trees public IEnumerable Search(string query, int pageSize, long pageIndex, out long totalFound, string searchFrom = null) { - return _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Document, pageSize, pageIndex, out totalFound, searchFrom); + return _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Document, pageSize, pageIndex, out totalFound, false, searchFrom); } } } diff --git a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs index d01e9fffb4..1ed23b6f96 100644 --- a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs +++ b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs @@ -214,12 +214,8 @@ namespace Umbraco.Web.Trees return result; } - /// - /// Abstract method to fetch the entities from the entity service - /// - /// - /// - internal abstract IEnumerable GetChildrenFromEntityService(int entityId); + internal virtual IEnumerable GetChildrenFromEntityService(int entityId) + => Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList(); /// /// Returns true or false if the current user has access to the node based on the user's allowed start node (path) access diff --git a/src/Umbraco.Web/Trees/MediaTreeController.cs b/src/Umbraco.Web/Trees/MediaTreeController.cs index d050b51a91..0f176f3ee1 100644 --- a/src/Umbraco.Web/Trees/MediaTreeController.cs +++ b/src/Umbraco.Web/Trees/MediaTreeController.cs @@ -164,14 +164,17 @@ namespace Umbraco.Web.Trees public IEnumerable Search(string query, int pageSize, long pageIndex, out long totalFound, string searchFrom = null) { - return _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Media, pageSize, pageIndex, out totalFound, searchFrom); + return _treeSearcher.ExamineSearch(query, UmbracoEntityTypes.Media, pageSize, pageIndex, out totalFound, false, searchFrom); } - internal override IEnumerable GetChildrenFromEntityService(int entityId) - // Not pretty having to cast the service, but it is the only way to get to use an internal method that we - // do not want to make public on the interface. Unfortunately also prevents this from being unit tested. - // See this issue for details on why we need this: - // https://github.com/umbraco/Umbraco-CMS/issues/3457 - => ((EntityService)Services.EntityService).GetMediaChildrenWithoutPropertyData(entityId).ToList(); + //internal override IEnumerable GetChildrenFromEntityService(int entityId) + // => Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList(); + + //internal override IEnumerable GetChildrenFromEntityService(int entityId) + // // Not pretty having to cast the service, but it is the only way to get to use an internal method that we + // // do not want to make public on the interface. Unfortunately also prevents this from being unit tested. + // // See this issue for details on why we need this: + // // https://github.com/umbraco/Umbraco-CMS/issues/3457 + // => ((EntityService)Services.EntityService).GetMediaChildrenWithoutPropertyData(entityId).ToList(); } }