diff --git a/src/Umbraco.Core/Constants-ObjectTypes.cs b/src/Umbraco.Core/Constants-ObjectTypes.cs
index 97213ae935..adc154174a 100644
--- a/src/Umbraco.Core/Constants-ObjectTypes.cs
+++ b/src/Umbraco.Core/Constants-ObjectTypes.cs
@@ -124,6 +124,11 @@ namespace Umbraco.Core
///
public const string MemberGroup = "366E63B9-880F-4E13-A61C-98069B029728";
+ ///
+ /// Guid for a Member Group object.
+ ///
+ public static readonly Guid MemberGroupGuid = new Guid(MemberGroup);
+
///
/// Guid for a Member Type object.
///
diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs
index 4201891779..14ae18fb99 100644
--- a/src/Umbraco.Core/Services/EntityService.cs
+++ b/src/Umbraco.Core/Services/EntityService.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using Umbraco.Core.Cache;
using Umbraco.Core.CodeAnnotations;
using Umbraco.Core.Events;
@@ -81,28 +80,16 @@ namespace Umbraco.Core.Services
{
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
{
- switch (umbracoObjectType)
- {
- case UmbracoObjectTypes.Document:
- case UmbracoObjectTypes.MemberType:
- case UmbracoObjectTypes.Media:
- case UmbracoObjectTypes.Template:
- case UmbracoObjectTypes.MediaType:
- case UmbracoObjectTypes.DocumentType:
- case UmbracoObjectTypes.Member:
- case UmbracoObjectTypes.DataType:
- case UmbracoObjectTypes.DocumentTypeContainer:
- case UmbracoObjectTypes.MemberGroup:
- return uow.Database.ExecuteScalar(new Sql().Select("id").From().Where(dto => dto.UniqueId == key));
- case UmbracoObjectTypes.RecycleBin:
- case UmbracoObjectTypes.Stylesheet:
- case UmbracoObjectTypes.ContentItem:
- case UmbracoObjectTypes.ContentItemType:
- case UmbracoObjectTypes.ROOT:
- case UmbracoObjectTypes.Unknown:
- default:
- throw new NotSupportedException();
- }
+ var nodeObjectType = GetNodeObjectTypeGuid(umbracoObjectType);
+
+ var sql = new Sql()
+ .Select("id")
+ .From()
+ .Where(
+ dto =>
+ dto.UniqueId == key &&
+ dto.NodeObjectType == nodeObjectType);
+ return uow.Database.ExecuteScalar(sql);
}
});
return result.HasValue ? Attempt.Succeed(result.Value) : Attempt.Fail();
@@ -120,32 +107,54 @@ namespace Umbraco.Core.Services
{
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
{
- switch (umbracoObjectType)
- {
- case UmbracoObjectTypes.Document:
- case UmbracoObjectTypes.MemberType:
- case UmbracoObjectTypes.Media:
- case UmbracoObjectTypes.Template:
- case UmbracoObjectTypes.MediaType:
- case UmbracoObjectTypes.DocumentType:
- case UmbracoObjectTypes.Member:
- case UmbracoObjectTypes.DataType:
- case UmbracoObjectTypes.MemberGroup:
- return uow.Database.ExecuteScalar(new Sql().Select("uniqueID").From().Where(dto => dto.NodeId == id));
- case UmbracoObjectTypes.RecycleBin:
- case UmbracoObjectTypes.Stylesheet:
- case UmbracoObjectTypes.ContentItem:
- case UmbracoObjectTypes.ContentItemType:
- case UmbracoObjectTypes.ROOT:
- case UmbracoObjectTypes.Unknown:
- default:
- throw new NotSupportedException("Unsupported object type (" + umbracoObjectType + ").");
- }
+ var nodeObjectType = GetNodeObjectTypeGuid(umbracoObjectType);
+
+ var sql = new Sql()
+ .Select("uniqueID")
+ .From()
+ .Where(
+ dto =>
+ dto.NodeId == id &&
+ dto.NodeObjectType == nodeObjectType);
+ return uow.Database.ExecuteScalar(sql);
}
});
return result.HasValue ? Attempt.Succeed(result.Value) : Attempt.Fail();
}
+ private static Guid GetNodeObjectTypeGuid(UmbracoObjectTypes umbracoObjectType)
+ {
+ switch (umbracoObjectType)
+ {
+ case UmbracoObjectTypes.Document:
+ return Constants.ObjectTypes.DocumentGuid;
+ case UmbracoObjectTypes.MemberType:
+ return Constants.ObjectTypes.MemberTypeGuid;
+ case UmbracoObjectTypes.Media:
+ return Constants.ObjectTypes.MediaGuid;
+ case UmbracoObjectTypes.Template:
+ return Constants.ObjectTypes.TemplateTypeGuid;
+ case UmbracoObjectTypes.MediaType:
+ return Constants.ObjectTypes.MediaTypeGuid;
+ case UmbracoObjectTypes.DocumentType:
+ return Constants.ObjectTypes.DocumentTypeGuid;
+ case UmbracoObjectTypes.Member:
+ return Constants.ObjectTypes.MemberGuid;
+ case UmbracoObjectTypes.DataType:
+ return Constants.ObjectTypes.DataTypeGuid;
+ case UmbracoObjectTypes.MemberGroup:
+ return Constants.ObjectTypes.MemberGroupGuid;
+ case UmbracoObjectTypes.RecycleBin:
+ case UmbracoObjectTypes.Stylesheet:
+ case UmbracoObjectTypes.ContentItem:
+ case UmbracoObjectTypes.ContentItemType:
+ case UmbracoObjectTypes.ROOT:
+ case UmbracoObjectTypes.Unknown:
+ default:
+ throw new NotSupportedException("Unsupported object type (" + umbracoObjectType + ").");
+ }
+ }
+
public IUmbracoEntity GetByKey(Guid key, bool loadBaseType = true)
{
if (loadBaseType)
diff --git a/src/Umbraco.Tests/Services/BaseServiceTest.cs b/src/Umbraco.Tests/Services/BaseServiceTest.cs
index ebd0be3b55..9c319a29a2 100644
--- a/src/Umbraco.Tests/Services/BaseServiceTest.cs
+++ b/src/Umbraco.Tests/Services/BaseServiceTest.cs
@@ -27,27 +27,27 @@ namespace Umbraco.Tests.Services
{
//NOTE Maybe not the best way to create/save test data as we are using the services, which are being tested.
- //Create and Save ContentType "umbTextpage" -> 1045
+ //Create and Save ContentType "umbTextpage" -> 1060
ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage");
contentType.Key = new Guid("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522");
ServiceContext.ContentTypeService.Save(contentType);
- //Create and Save Content "Homepage" based on "umbTextpage" -> 1046
+ //Create and Save Content "Homepage" based on "umbTextpage" -> 1061
Content textpage = MockedContent.CreateSimpleContent(contentType);
textpage.Key = new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0");
ServiceContext.ContentService.Save(textpage, 0);
- //Create and Save Content "Text Page 1" based on "umbTextpage" -> 1047
+ //Create and Save Content "Text Page 1" based on "umbTextpage" -> 1062
Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id);
subpage.ReleaseDate = DateTime.Now.AddMinutes(-5);
subpage.ChangePublishedState(PublishedState.Saved);
ServiceContext.ContentService.Save(subpage, 0);
- //Create and Save Content "Text Page 1" based on "umbTextpage" -> 1048
+ //Create and Save Content "Text Page 1" based on "umbTextpage" -> 1063
Content subpage2 = MockedContent.CreateSimpleContent(contentType, "Text Page 2", textpage.Id);
ServiceContext.ContentService.Save(subpage2, 0);
- //Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1049
+ //Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1064
Content trashed = MockedContent.CreateSimpleContent(contentType, "Text Page Deleted", -20);
trashed.Trashed = true;
ServiceContext.ContentService.Save(trashed, 0);
diff --git a/src/Umbraco.Tests/Services/EntityServiceTests.cs b/src/Umbraco.Tests/Services/EntityServiceTests.cs
index de8cc7753d..656915c3f9 100644
--- a/src/Umbraco.Tests/Services/EntityServiceTests.cs
+++ b/src/Umbraco.Tests/Services/EntityServiceTests.cs
@@ -533,6 +533,44 @@ namespace Umbraco.Tests.Services
Assert.AreEqual(mediaObjectType, UmbracoObjectTypes.MediaType);
}
+ [Test]
+ public void EntityService_Can_Get_Key_For_Id()
+ {
+ var service = ServiceContext.EntityService;
+ var result = service.GetKeyForId(1060, UmbracoObjectTypes.DocumentType);
+
+ Assert.IsTrue(result.Success);
+ Assert.AreEqual(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), result.Result);
+ }
+
+ [Test]
+ public void EntityService_Cannot_Get_Key_For_Id_With_Incorrect_Object_Type()
+ {
+ var service = ServiceContext.EntityService;
+ var result = service.GetKeyForId(1060, UmbracoObjectTypes.MediaType);
+
+ Assert.IsFalse(result.Success);
+ }
+
+ [Test]
+ public void EntityService_Can_Get_Id_For_Key()
+ {
+ var service = ServiceContext.EntityService;
+ var result = service.GetIdForKey(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.DocumentType);
+
+ Assert.IsTrue(result.Success);
+ Assert.AreEqual(1060, result.Result);
+ }
+
+ [Test]
+ public void EntityService_Cannot_Get_Id_For_Key_With_Incorrect_Object_Type()
+ {
+ var service = ServiceContext.EntityService;
+ var result = service.GetIdForKey(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.MediaType);
+
+ Assert.IsFalse(result.Success);
+ }
+
private static bool _isSetup = false;
private int folderId;